循环中控制语句:
- continue:继续;表示循环体内下面的代码不执行,重新开始下一次循环
- break:打断;马上停止循环,执行循环体后面的代码
- exit:表示直接跳出程序
使用说明:循环可以嵌套循环,也可以嵌套if判断,都可以互相结合使用。
for循环:多用于已知次数的循环(定循环),比如循环100次,循环一个目录下的文件,这些都是有一定次数的。
for i in {1..3} ##可以遍历文件执行命令需要加`反引号`或者$()
do
echo $i
done
#########输出
echo 1
echo 2
echo 3
########其他示例
for ((i=1;i<=5;i++));do echo $i;done
for ((i=1;i<=10;i+=2));do echo $i;done
for i in {a..z}; do echo $i; done
#######遍历文件示例
for file in /etc/*
do
echo $file
done
#########
for file in $(find /etc)
do
echo $file
done
while:条件为真就进入循环;条件为假就退出循环.多用于不定次数的循环
while 条件 #条件为:true就是无限循环
do
条件满足时候:执行动作一
条件满足时候:执行动作二
......
done
#######还能读取文本,按行读取显示
while read line
do
echo $line
done < filename.txt
##########
在上面的示例中,while read命令将循环遍历filename.txt文件中的每一行,并将其赋值给line变量。
然后,echo $line命令将打印每一行的内容。
until:直到满足条件就退出循环
until 条件 # 直到满足条件就退出循环
do
command
command
......
done
if判断语法格式:
使用说明:整数比较大小采用参数,字符串比较直接使用=等于或!=不等于
判断参数 |
说明 |
-eq |
相等 |
-ne |
不等 |
-gt |
大于 |
-lt |
小于 |
-ge |
大于等于 |
-le |
小于等于 |
判断参数 |
说明 |
-e (常用) exist |
判断文件(任何类型文件)是否存在 |
-f (常用) file |
判断是否为普通文件 |
-d (常用) directory |
判断是否为目录 |
-S |
判断是否为socket文件 |
-p |
判断是否为pipe管道文件 |
-c |
判断是否为character字符设备文件 |
-b |
判断是否为block块设备 |
-L link |
判断是否为软链接 |
-s |
判断文件是否存在并且为非空文件 |
判断参数 |
|
条件1 -a 条件2 (and) 条件1 && 条件2 |
两个条件同时满足,整个大条件为真 |
条件1 -o 条件2 (or) 条件1 || 条件2 |
两个条件满足任意一个,整个大条件为真 |
符号 |
说明 |
; |
不管前面执行是否正确,都会执行后面 |
&& |
前面执行正确,才会执行后面 |
|| |
前面执行失败,才会执行后面 |
####常用判断单分支判断
if [ 条件1 ];then
命令1
elif [ 条件2 ];then # 可以有多个elif
命令2
else
命令3
fi
#####其他判断语法
test -e /etc/fstab 判断文件是否存在
[ -d /etc ] 判断目录是否存在,存在条件为真 (中括号里面左边两边有空格)
[ ! -d /etc ] 判断目录是否存在,不存在条件为真 (中括号里面左边两边有空格)
[[ -f /etc/fstab ]] 判断文件是否存在,并且是普通文件 (中括号里面左边两边有空格)
[ -e /etc/fstab ] && echo "文件存在" || echo "文件不存在"
文件存在
[ -e /etc/sdfdsfdsa ] && echo "文件存在" || echo "文件不存在"
文件不存在
#####样例
#!/bin/bash
用户输入一个文件路径,判断属于那种类型
read -p "输入一个文件:" file
if [ -L $file ];then
echo "$file是软链接文件"
elif [ -d $file ];then
echo "$file是目录"
elif [ -S $file ];then
echo "$file是socket文件"
elif [ -p $file ];then
echo "$file是pipe管道文件"
elif [ -c $file ];then
echo "$file是character字符设备"
elif [ -b $file ];then
echo "$file是block设备"
elif [ -f $file ];then
echo "$file是普通文件"
else
echo "$file不存在"
fi