11.6.流程控制语句
11.6.1.判断条件语句
11.6.1.1.按文件类型进行判断
计算机只能做出简单判断而不能感性的分析事物,所以需要给计算机明确的条件以及真假帮助计算机作出判断。
判断语句的格式有两种 test -e+文件名(绝对路径)或者[ -e+文件名(绝对路径) ],如[ test -e /root/anaconda-ks.cfg ]回车什么都不会显示,但是如果再打印?就会看到显示0,如果该文件不存在,那么?就会看到显示0,如果该文件不存在,那么?就会看到显示0,如果该文件不存在,那么?就会显示1。或者[ test -e /root/anaconda-ks.cfg ]&&echo yes||echo no,如果文件存在则返回yes,不存在则返回no。注意方括号里面,两边都应该有空格。
11.6.1.2.按照文件权限判断
还可以根据文件权限判断,语法和上面一样,但是这种判断不会区分用户,也就是只要有一类用户有这个权限,就会返回真,不会具体区分U,G,R.
11.6.1.3.文件之间比较
如文件a.txt有一个硬链接ab.txt,则使用命令
[ a.txt -ef ab.txt ] &&echo yes ||echo no ,就能判断这两个各文件是不是同一个文件,也就是判断inode号是否一致。
11.6.1.4. 整数之间的比较
如[ 20 -ge 30 ]&&echo yes||echo no,就能返回 no
11.6.1.5.字符串之间的比较
11.6.1.6.多重条件判断
如[ -n “&num” -a “$num” -gt 2 ] &&echo yes ||echo no即判断num是否有值同时判断是否等于2,都满足才会打印yes。
11.6.2if语句
11.6.2.1.单分支if语句
if [ 条件判断式 ];then
程序
fi
或者:
if [ 条件判断式 ]
then
程序
fi
方括号就是判断条件语句里的方括号,完全一样,在这里给if做为判断条件。
举个栗子:
#!/bin/bash
rate=$(df -h|grep “/dev/sda2”|awk ‘{print $5}’|cut -d “%” -f 1)
if[ $rate -ge 80 ];then
echo “warning! /dev/sda2 if full!!”
fi
用于查看sda2磁盘占用空间大小,占用率太高就发出警告。
11.6.2.2.双分支if语句
语法是:
if [ 条件判断式 ]
then
条件成立执行的程序
else
条件不成立执行的程序
fi
11.6.2.3.多分支if语句
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断是2成立时,执行程序2
.
.
.
else
当所有条件都不成立时,执行此程序
fi
11.6.3.case语句
case语句也是多分支语句,和if不同的是,if是可以判断多个条件,但是case只能判断一个条件·,而判断的是这个条件的多个结果。case语法是:
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
.
.
.
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
和C语言中的switch-case语法执行原理差不多,该语法要注意每个段程序后有两个冒号,最后一个值是星号,还有esac做结尾。
11.6.4.for循环
语法是:
for 变量 in 值1 值2 值3…
do
程序
done
第一次循环就会把值1赋给变量执行一次程序,然后把值2赋给变量再执行一次程序,直到全部都赋值完,程序也执行完,就会退出循环。
for循环也支持C语言中for的用法,但是格式有点不同:
s=0
for((i=1;i<100;i=i+1))
do
s=$ (($ s+$ i))
done
echo $s
这个脚本就可以像C语言一样,算出1累加到100的结果,shell中没有i++,要用i=i+1.
11.6.5.while循环和until循环
for循环是固定循环,只要给了循环次数就会循环多少次,而while是不定循环,也就是条件循环,只要条件判断式成立,循环就会一直继续,知道条件判断式不成立,循环才会停止。
语法是:
while [ 条件判断式 ]
do
程序
done
举个栗子:
i=1
s=0
while [ $ 1 -le 100 ]
do
s=$ (( $ s+$ i))
i=$ (( $ i+1))
done
echo “the sum is :$s”
这样也可以计算从1加到100的值。
until循环就和while刚好相反,条件满足就会终止循环,条件不满足才会执行程序。
ps:最后强调,shell严格控制空格问题,这里由于编辑器的问题,我加了空格,实际上(())当中一个空格都没有,而[ ] 比较表达式的时候又必须要空格,总之,在写表达式的时候出错,要认真检查空格问题,找不出来就自己试一下,看到底需不需要空格。
总结:Linux基础知识到这里就完了,如果能把所有的全部学会,那么最起码达到了管理员水平了,接下来将会继续发布有关Linux系统编程的博客。