Shell 编程基础
第一行 **#!**是一个约定的标记,它告诉系统这个脚本用哪种shell来执行
#!/bin/bash
新创建的脚本需要赋予执行权限
chmod +x
Shell变量
定义变量时,变量名不加美元符号 $
变量名和等号之间不能有空格
Shell基本运算符
val=`expr 2 + 2`
**注意:**条件表达式要放在方括号之间,并且要有空格
a=20 b=10
+ | 加法 | expr $a + $b 结果为 30。 |
---|---|---|
- | 减法 | expr $a - $b 结果为 -10。 |
* | 乘法 | expr $a \* $b 结果为 200。 |
/ | 除法 | expr $b / $a 结果为 2。 |
% | 取余 | expr $b % $a 结果为 0。 |
= | 赋值 | a=$b 把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
关系运算符
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
---|---|---|
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
shell流程控制
if else
#常用判断文件
if [ -f file ] 如果文件存在
if [ -d dir ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行
if condition -a 且的关系
-o 或的关系
then
command1
elif
command2
...
else
commandN
fi
for循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
#循环的次数由单词表中单词的个数来决定,变量每次从单词表取一个单词,然后执行循环体,直到将所有的单词全部取完
while语句
while condition
do
command
done
case语句
case 值 in
模式1)
command1
...
commandN
;;
模式2)
command1
...
commandN
;;
esac
Shell函数
1、函数定义
[ function ] funname [()]
{
action;
[return int;]
}
2、函数调用
第一种调用方法:
函数名 参数1 参数2 …
通过 $? (上一个函数或者命令返回的结果),获得函数的返回值。函数本身要在屏幕上输出结果。
(适合返回的是一个整数,并且只能够返回0-255之间的整数)。
在函数内部通过位置变量($1, $2, $3 …)来获得传递的参数。
第二种调用方法:
value=`函数名 参数1 参数2 …`
将函数的标准输出返回给一个变量(使用反向单引号),函数本身不再在屏幕上输出结果。相当于是把函数的输出赋值给一个变量,而并没有使用函数本身的返回值。