Linux Shell 教程Ⅱ

1、Shell传递实例

当我们在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n(n为任意数字)。
以下向脚本传递参数,然后输出
$0 为文件名
$1 为第一个参数
$2 为第二个参数
$3为第三个参数
Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

参数处理 说明
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
[email protected] 使"*相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “2""2" … "n” 的形式输出所有参数。
$ 显示Shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

$* 和 [email protected] 的区别:
Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

2、Shell数组

在数组中,数组时可以存放多个值的,Bash Shell只支持一维数组,不支持多维,初始化时不需要定义数组大小。数组元素的下标由0开始。
语法格式如下:
array_name=(value1 value2 value3 ...valuen)

  1. 读取数组
    Linux Shell 教程Ⅱ
    Linux Shell 教程Ⅱ
  2. 获取数组中的所有元素
    Linux Shell 教程Ⅱ
    Linux Shell 教程Ⅱ
  3. 获取数组长度
    Linux Shell 教程Ⅱ
    Linux Shell 教程Ⅱ

3、Shell 基本运算符

Shell基本运算符包括:
4. 算数运算符
5. 关系运算符
6. 布尔运算符
7. 字符串运算符
8. 文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,比如:awk和expr。
expr是表达式计算工具,它能完成表达式的求值操作。
Linux Shell 教程Ⅱ
9. 注:这里使用的是反引号 ` 而不是单引号 ’
Linux Shell 教程Ⅱ

1. 算数运算符

Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

2. 关系运算符

关系运算符只支持数字,不支持字符串,字符串数字除外。

运算符 说明
-eq 检测两个数是否相等,相等返回true
-ne 检测两个数是否不相等,不相等返回true

Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

运算符 说明
-gt j检测左边的数是否大于右边的数,如果是,返回true
-lt 检测左边的数是否小于右边的数,如果是,返回true

Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

运算符 说明
-ge 检测左边的数是否大于等于右边的数,如果是,返回true
-le 检测左边的数是否小于等于右边的数,如果是,返回true

Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

3. 布尔运算符

运算符 说明 举例
非运算,表达式为true则返回false,否则返回true [!false]返回true。
-o 或运算,有一个表达式为true则返回true [$a-lt 20-o$b-gt 100]返回true。
-a 与运算,两个表达式都为true才返回true [$a-lt 20-a$b-ge 100]返回false。

Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ

4.逻辑运算符

运算符 说明 举例
&& 逻辑的AND [[$a-lt 100 && $b-gt 100]]返回false。
|| 逻辑的OR [[$a-lt 100 || $b-gt 100]]返回false。
![在这里插入图片描述](https://img-blog.****img.cn/2020060417125748.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY5MzA1Mw==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.****img.cn/20200604171305489.png) ## 5.字符串运算符
运算符 说明 举例
= 检测两个字符串是否相等,相等返回true。 [$a=$b]返回false
!= 检测两个字符串是否相等,不相等返回true。 [$a!=$b]返回true
-z 检测字符串长度是否为0,为0返回true。 [-z$a]返回false
-n 检测字符串长度是否不为0,不为0返回true。 [-n“$a”返回true
$ 检测字符串是否为空,不为空返回true。 [$a]返回true
![在这里插入图片描述](https://img-blog.****img.cn/20200604171443650.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzY5MzA1Mw==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.****img.cn/20200604171452726.png) ![在这里插入图片描述](https://img-blog.****img.cn/20200604171458256.png) ## 6.文件测试运算符
操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回true。 [ -b $file ] 返回false
-c file 检测文件是否是字符设备文件,如果是,则返回true。 [ -c $file ] 返回false
-d file 检测文件是否是目录,如果是,则返回true。 [ -d $file ]返回false
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。 [ -f $file ]返回true
-g file 检测文件是否设置了SGID位,如果是,则返回true。 [ -g $file ]返回true
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回true。 [ -k $file ]返回false
-p file 检测文件是否是有名管道,如果是,则返回true。 [ -p $file ]返回false
-u file 检测文件是否设置了SUID位,如果是,则返回true。 [ -u $file ]返回false
-r file 检测文件是否可读,如果是,则返回true。 [ -r $file ]返回true
-w file 检测文件是否可写,如果是,则返回true。 [ -w $file ]返回true
-x file 检测文件是否可执行,如果是,则返回true。 [ -x $file ]返回true
-s file 检测文件是否为空(文件大小是否大于0),不为空返回true。 [ -s $file ]返回true
-e file 检测文件(包括目录)是否存在,如果是,则返回true。 [ -e $file ]返回true

-S判断文件是否socket。
-L检测文件是否存在并且是一个符号链接。
Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ
Linux Shell 教程Ⅱ