Shell 流程控制
Shell 流程控制和 Java、PHP 等语言不一样,sh 的流程控制不可为空,如(以下为 PHP 流程控制写法):
实例
1234567<?phpif (isset($_GET["q"])) { search(q);}else { // 不做任何事情}
在 sh/bash 里可不能这么写,如果 else 分支没有语句执行,就不要写这个 else。
if elsefiif 语句语法格式:
1234567if conditionthen command1 command2 ... commandN fi
写成一行(适用于终端命令提示符):
1if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
末尾的 fi 就是 if 倒过来拼写,后面还会遇到类似的。
if elseif else 语法格式:
123456789if conditionthen command1 ...
Shell test 命令
Shell test 命令Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
数值测试
参数
说明
-eq
等于则为真
-ne
不等于则为真
-gt
大于则为真
-ge
大于等于则为真
-lt
小于则为真
-le
小于等于则为真
实例
12345678num1=100num2=100if test $[num1] -eq $[num2]then echo '两个数相等!'else echo '两个数不相等!'fi
输出结果:
1两个数相等!
代码中的 [] 执行基本的算数运算,如:
实例
1234567#!/bin/basha=5b=6result=$[a+b] # 注意等号两边不能有空格echo "result 为: $result"
结果为:
1result 为: 11
参数
说明
=
等于则为真
!=
不相等则为真
-z 字符串
字符串的长度为零则为真
-n 字符串
字符串的长度不为零则为真 ...
Shell printf 命令
Shell printf 命令上一章节我们学习了 Shell 的 echo 命令,本章节我们来学习 Shell 的另一个输出命令 printf。
printf 命令模仿 C 程序库(library)里的 printf() 程序。
printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。
printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。
printf 命令的语法:
1printf format-string [arguments...]
参数说明:
format-string: 为格式控制字符串
arguments: 为参数列表。
实例
12345$ echo "Hello, Shell"Hello, Shell$ printf "Hello, Shell\n"Hello, Shell$
接下来,我来用一个脚本来体现 printf 的强大 ...
Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如,两个数相加(注意使用的是反引号 \`* 而不是单引号 *‘**):
注意:表格里的*号都可以省略,应为渲染问题,以及一些md语法问题导致,请谅解。
实例
1234#!/bin/bashval=`expr 2 + 2`echo "两数之和为 : $val"
执行脚本,输出结果如下所示:
1两数之和为 : 4
算术运算符下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符
说明
举例
+
加法
expr $a + $b 结果为 30。
-
减法
expr $a - $b 结果为 -10。
*
乘法
expr $a \* $b 结果为 200。
/
除法
expr $b / $a 结果为 2。
%
取余
e ...
Shell 数组
Shell 数组数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由 0 开始。
表格里的号是编辑语法问题,渲染的,输入命令时可以忽略
Shell 数组用括号来表示,元素用”空格”符号分割开,语法格式如下:
1array_name=(value1 value2 ... valuen)
实例
创建一个简单的数组 my_array:
my_array=(A B “C” D)
我们也可以使用数字下标来定义数组:
实例
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
读取数组读取数组元素值的一般格式是:
1${array_name[index]}
以下实例通过数字索引读取数组元素:
my_array=(A B “C” D)
echo “第一个元素为: ${my_array[0]}”
echo “第二个 ...
Shell 传递参数
Shell 传递参数我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……
以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名(包含文件路径):
实例
#!/bin/bash
# author:菜鸟教程
# url:www.runoob.com
echo “Shell 传递参数实例!”;
echo “执行的文件名:$0”;
echo “第一个参数为:$1”;
echo “第二个参数为:$2”;
echo “第三个参数为:$3”;
为脚本设置可执行权限,并执行脚本,输出结果如下所示:
1234567$ chmod +x test.sh $ ./test.sh 1 2 3Shell 传递参数实例!执行的文件名:./test.sh第一个参数为:1第二个参数为:2第三个参数为:3
另外,还有几个特殊字符用来处理参数:
参数处理
说明
$#
传递到脚本的参数个数
$*
以一个单字符串显示所有 ...