bash编程
看一个简单的例子,写一个Hello world!
给其执行权限,执行结果为
这个简单的脚本开头是以“#!”这个表示在Linux中只要是可执行脚本都是以它开头,第二行开始凡是#开头的均为注释信息,并不运行。
上面截图中在执行脚本的时候使用bash内键指令“.”和“source”还可以使用# sh hello.sh
和bash hello.sh来执行
bash编程是过程式编程语言,其执行方式有:顺序执行;选择执行;循环执行。
顺序执行:
选择执行:测试条件,可能会多个测试条件,某条件满足时,则执行对应的分支
循环执行:将同一段代码反复执行多次;因此,循环必须有退出条件;否则,则陷入死循环;
bash的循环语句:for循环;while循环;until循环。
其中for语句的格式如下
for VAR_NAME in LIST; do
循环体
done
LIST 中可以是一个元素也可以是多个元素
看个例子
创建十个用户user101..user111
执行之后,查看一下
bash的变量类别: 环境变量;局部变量;位置变量;特殊变量。
查看当前shell进程中得所有变量可使用set,查看点前shell进程中的所有环境变量可使用export,printenv和env。
变量命名的要求:不能使用程序中的关键字如if,case,for等;只能使用字母,数字和下划线,且不能以数字开头;要见名知义。
变量类型:数值型;字符型;布尔型。
数值型可分:精确数值:整数;近似数值:浮点型(单精度浮点,双精度浮点)。
布尔类型结果只有两个true ,false。
特殊的shell变量:
$0 获取当前执行的shell脚本的文件名
$n 获取当前执行的shell脚本的第n个参数值,n=1..9
$* 获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制
$# 获取当前shell命令行中参数的总个数
$$ 获取当前shell的进程号(PID)
$! 执行上一个指令的PID
$? 获取执行的上一个指令的返回值(0 为成功, 非零为失败)
$@ 这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制
例如:一个脚本可以接受一个以上的文件路径作为参数;显示每个文件所拥的行数;显示本次共对多少个文件执行了行数统计;
执行结果如下
while适用于循环次数未知,或不便用for直接生成较大的列表时;
while循环格式
while 测试条件; do
循环体
done
假如要计算20以内所有整数之和
执行结果
还可以使用until, 不过until的测试条件正好与while相反,其使用格式
until 测试条件; do
循环体
done
其执行结果
在程序中有bash算术运算,下面对其详细说明
算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示
+:对两个变量做加法。
-:对两个变量做减法。
*:对两个变量做乘法。
/:对两个变量做除法。
**:对两个变量做幂运算。
%:取模运算,第一个变量除以第二个变量求余数。
+=:加等于,在自身基础上加第二个变量。
-=:减等于,在第一个变量的基础上减去第二个变量。
*=:乘等于,在第一个变量的基础上乘以第二个变量。
/=:除等于,在第一个变量的基础上除以第二个变量。
%=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。
在运算过程中let和$[]可指向数学运算,
用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo $b来输出b的值。如果没有let,则会输出1+2。
用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo $[1+2],将输出结果3。
declare核心语法:-i 声明为整数;-a 声明未数组;-f 声明未函数;-r 声明未只读。
Bash条件测试:整数测试;字符串测试;文件测试。
整数测试: -eq(等于),-ne(不等),-ge(大于等于),-le(小于等于),-gt(大于),-lt(小于)。
字符测试: ==, !=, > , < ,= ,-z ,-n
文件测试: -e FILE: 存在则为真;否则则为假;
-f FILE: 存在并且为普通文件,则为真;否则为假;
-d FILE: 存在并且为目录文件,则为真;否则为假;
-L/-h FILE: 存在并且为符号链接文件,则为真;否则为假;
-b: 块设备;
-c: 字符设备;
-S: 套接字文件;
-p: 命名管道;
-s FILE: 存在并且为非空文件则为值,否则为假;
多分支的if语句:
if 条件1; then
分支1
elif 条件2; then
分支2
...
else
分支n
fi
写一个脚本,生成两个随机数,比较其大小;显示大数;
bash有个内置变量:$RANDOM,显示随机数
执行即可显示一个数字。
条件判断类例子。
例:给定一个路径,判断如果为普通文件,显示之;如果为目录,显示之;否则,说无法识别。
Bash组合条件测试。
bash知识点:组合条件测试:-a: 与,-o: 或,!: 非,单目操作符。
命令组合条件测试:&&: 与,||: 或,!: 非。
短路操作:只要前半段已经可以决定最终结果,后半段就不再运算;
与运算:
真 && 真 = 真
真 && 假 = 假
假 && {真|假} = 假
或运算:
假 || 0 = 0
假 || 1 = 1
真 || 0或1 = 1
如下例子
[ -e /tmp/test10 ] || mkdir /tmp/test10
id $UserName &> /dev/null || useradd $UserName
! id $UserName &> /dev/null && useradd $UserName || echo "$UserName exists."
id $UserName &> /dev/null && echo "$UserName exists." || useradd $UserName
转载于:https://blog.51cto.com/anyulinux/1535078