目录
1. Shell脚本
1.1 Shell脚本概述
1.2 Shell的作用
1.3 Shell脚本的构成
2. 重定向与管道操作
2.1 交互式硬件设备
2.2 重定向操作
3. shell变量
3.1 自定义变量
3.2 变量的作用范围编辑
3.3 整数变量的运算
4. 环境变量
4.1 特殊的Shell变量
4.2 只读变量
1. Shell脚本
1.1 Shell脚本概述
(1)Shell脚本概念
(2)shell脚本应用场景
1.2 Shell的作用
Shell的作用——命令解释器,“翻译官”
介于系统内核与用户之间,负责解释命令行
Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。
查看系统中shell类型
最常用的就是bash、tcsh、csh、sh、nologin这些shell
/bin/bash和/bin/sh都是bash的软连接,都指向bash
-
sh:已经被bash所替换,是bash的前身;
-
nologin:奇怪的shell,这个shell可以让用户无法登录主机;
-
bash(/bin/bash)是目前大多数Linux版本采用的默认Shell.
为什么系统上合法的Shell要写入/etc/shells这个文件呢?
这是因为系统某些服务运行过程中,会去检查用户能够使用的Shell,而这些shell的查询就是借由/etc/shells这个文件。
用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?
当用户登录的时候,系统就会给我一个shell让我来用,而这个登录取得的Shell就记录在/etc/passwd这个文件内。
1.3 Shell脚本的构成
(1)脚本申明(解释器):若第一行为" #!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
(2)注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
1.4 编写Shell脚本
(1)编写脚本代码
使用vim编辑器
(2)执行shell脚本
方法一:指定路径的命令,要求文件必须有x权限。
-
指定绝对路径:/root/first.sh
-
指定相对路径:./first.sh
方法二:指定shell来解释脚本,不要求文件必须有x权限。
sh 脚本路径: sh first.sh
source 脚本路径: . first.sh 或者 source first.sh
bash和sh命令执行脚本文件;
注意:
指定路径以及sh、bash执行脚本的方式,会在子shell环境中运行,不会影响当前所在目录、变量的值等因素;而"."和source命令执行脚本的方式,是在当前shell环境中运行,会影响当前所在目录、变量的值 等因素。
2. 重定向与管道操作
2.1 交互式硬件设备
2.2 重定向操作
重定向输入:<,从指定文件读取数据
重定向输出:>,将输出结果保存到指定文件,会覆盖文件中原有内容
重定向追加:>>,将输出结果追加到指定文件的尾部,可以实现合并两个文件的效果
标准错误输出:2>,将错误信息保存到指定的文件中,会覆盖文件中原有的内容
混合输出:&>将代码正确执行的内容标准输出到指定文件中,或者将错误信息保存到指定文件
混合输出的补充知识:(2>&1:将标准错误输出重定向到标准输出) 面试考试题
ls -lh > test.txt 2>&1
ls -ln 标准输出 到屏幕
ls -ln > test.txt 重定向输出到 text.txt 1 --> test.txt
2>&1 错误输出 重定向到 标准输出
3. shell变量
3.1 自定义变量
定义变量
下划线开头定义变量
题目:要求将$a和$b名字交换
解:准备一个临时变量$c,
read -p "提示内容" 变量名 #从键盘输入中获取变量值
`...` $(...) 提取里面的命令执行后的结果
3.2 变量的作用范围
让自定义的变量在所有shell环境中有效的方法:
1)在 /etc/profile 文件中定义 export 变量名=变量值
source /etc/profile 立即生效 或 重新登录系统自动生效
2)在 /etc/bashrc 文件中定义 变量名=变量值
切换 shell 环境自动生效
3.3 整数变量的运算
进行整数变量的运算
echo $(expr 整数1 运算符 整数2) $(expr $变量1 运算符 $变量2) + - \* /
echo $[整数1 运算符 整数2] $[变量1 运算符 变量2] + - * / %
echo $((整数1 运算符 整数2)) $((变量1 运算符 变量2)) + - * / %
使用let关键字进行整数变量的运算(必须要赋予给变量值)
浮点数运算
方法一
方法二
4. 环境变量
4.1 特殊的Shell变量
env 查看当前shell环境中所有可用的环境变量
echo $HOME:查看当前用户的家目录
4.2 只读变量
readonly 变量名=变量值
4.3 位置变量
4.4 预定义变量
$? 代表的是上一条Linux命令执行的返回状态码(0~255),0表示上一条命令执行正确,非0值则表示上一条命令执行异常
$* 默认代表脚本后面跟的所有参数,加上双引号后 "$*" 会把所有参数看做一个整体
$@ 默认代表脚本后面跟的所有参数,加上双引号后 "$@" 还是会把每个参数看做一个个体