一、什么是shell
- Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash shell
- Shell也是一门编程语言<解释型的编程语言>,即shell脚本
- 一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不同的
二、Shell脚本的执行方式
- 第一种:输入脚本的绝对路径或相对路径,首先要赋予+x权限
- 绝对路径
- ./脚本名
- 第二种:bash或sh+脚本
- sh 脚本名
- 第三种:在脚本的路径前再加“.”
- ./路径
- . ./ 脚本名
- 区别:第一种和第二种会新开一个bash,不同的bash中的变量无法共享
三、Shell中的变量
- Linux Shell中的变量分为“系统变量”和“用户自定义变量”,可以通过set命令查看系统变量
- 常用的系统变量:$HOME、$PWD、$SHELL、$USER等等
- 显示当前shell中所有变量:set
- 定义变量
- 变量名=值
- 注意:
- 等号两侧不能有空格
- 变量名称一般习惯为大写
- 双引号和单引号有区别,双引号仅将空格脱意,单引号会讲所有特殊字符脱意
- unset 变量名:撤销该变量
- readonly 变量名=变量值:声明静态的变量,不能unset
- export 变量名:可以把变量提升为全局环境变量,可以供其他shell程序使用
- 将命令的返回值赋值给变量
- A=`ls -la`,反引号,运行里面的命令,并把结果返回给变量A
- A=$(ls -la),等价于反引号
- Shell中的特殊变量
- $? 表示上一个命令退出的状态
- $$ 表示档案进程编号
- $0 表示当前脚本名称
- $n 表示n位置的输入参数(n代表数字,n>=1)
- $# 表示参数的个数,常用于循环
- $*和$@都表示参数列表
- $*和$@都表示传递给函数或脚本的所有参数,不被双引号""包含时,都以$1 $2 ...$n的形式输出所有参数
- 当它们被双引号""包含时,"$*"会将所有的参数作为一个整体,以"$1 $2 ... $n"的形式输出所有参数;“$@”会将哥哥参数分开,以“$1” “$2”...“$n”的形式输出所有参数
四、运算符
- 格式:expr m + n或$((m+n)),expr运算符间要有空格
五、for循环
- 第一种
for N in 列表
do
语句
done
- 第二种
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done
六、while循环
- 第一种
while expression
do
命令
done
- 第二种
i=1
while ((i<=3))
do
echo $i
let i++
done
七、case语句
case $1 in
start)
语句
;;
stop)
语句
;;
*)
语句
esac
八、read命令
- read -p(提示语句) -n(字符个数) -t(等待时间)
- read -p "please input your name:" NAME
九、if判断
if condition
then
statements
elif condition
then statements
else
statements
fi
- 判断语句
- [ condition ]注意condition前后要有空格,非空返回true
十、常用的判断条件
- = 字符串比较
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不能于
- -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
- -f 文件存在并且是一个常规文件
- -s 文件存在且不为空
- -d 文件存在并且是一个目录
- -b 文件存在并且是一个块设备
- -L 文件存在并且是一个链接
十一、Shell自定义函数
[ function ] funname [()]
{
语句
[retuen int;]
}
- 注意
- 必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其他语言一样先预编译
- 函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。retuen后跟数值n(0-255)