判断与控制
if语句
if-else
#语法
if command 或 [ condition ]
then
conmands
fi
#或
if command 或 condition;then
conmands
fi
#command(命令语句)执行成功或条件判断为true,返回值为0的时候才会执行then
#condition(判断条件)左右两侧加中括号,且中括号的里侧必须加空格
if-then-else
#语法
if conmmand 或 [ condition ]
then
commands
else
commands
fi
嵌套if
#语法
if conmmand 或 [ condition ]
then
commands
elif conmmand 或 [ condition ]
then
commands
else
commands
fi
条件判断
数值比较
**格式:[ 数值1 判断符 数值2 ] **
例: n1 -eq n2
判断符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-gt | 大于 |
-ge | 大于等于 |
-lt | 小于 |
-le | 小于等于 |
例
#!/bin/bash
#
if [ $1 -eq $2 ]
then
echo "111"
elif [ $1 -gt $2 ]
then
echo "222"
elif [ $1 -lt $2 ]
then
echo "333"
fi
字符串比较
判断符 | 含义 |
---|---|
= | 相等 |
!= | 不等 |
< | 小于(依次比较每个字符在字母表中的顺序) |
> | 大于(同上) |
-n str1 | str1的长度不是0 |
-z str1 | str1的长度是0 |
如果做非零判断,str1是自己定义的变量,需要加双引号包围变量
文件比较
判断符 | 含义 |
---|---|
-d file | 是否为目录 |
-f file | 是否为文件 |
-e file | 是否存在 |
-r file | 是否可读 |
-w file | 是否可写 |
-x file | 是否可执行 |
-s file | file存在且非空 |
file1 -nt -file2 | file1比file2新 |
file1 -ot file2 | file1比file2旧 |
复合条件
#使用正常的 && || 比较。逻辑判断符两侧加空格
#每个条件都要用中括号括起来
#例
var1=11
var2=22
var3=33
if [ $var1 -gt $var2 ] && [ $var2 -lt $var3];then
echo "111"
fi
case语句
case 变量 in
参数1)
commands
;;
参数2)
commands
;;
esac
#例:
#!/bin/bash
#
var1=mike
case $var1 in
jack)
echo "hello jack"
;;
mike)
echo "hello mike"
;;
*)
echo "hello everyone"
;;
esac
循环与控制
for语句
语法
#语法
for var in list
do
commands
done
基础应用
#例1
#!/bin/bash
#
for i in beijing shandong shanghai
do
echo "Province is $i"
done
#可以通过另行设置IFS的值,改变默认分隔符 IFS=":"
#例2
#!/bin/bash
#
for i in {01..20}
do
echo "Number is $i"
done
从命令执行结果读取值
#例1:输出root目录下的所有内容
#!/bin/bash
#
FILE=$(ls /root/)
for i in $FILE
do
echo "file is $i"
done
#例2:for配合if判断,输出root目录下的所有文件夹
#!/bin/bash
#
for i in $(ls /root/)
do
if [ -d /root/$i ];then
echo "$i is DIR"
elif [ -f /root/$i ];then
echo "$i is FILE"
else
echo "$i is OTHER TYPE"
fi
done
#关于使用回车键等转义符作为切分依据的说明
IFS=$'\n'
for和if嵌套案例
#循环判断/root/code_2目录下的所有文件,给以.sh结尾的文件赋权755执行权限
#!/bin/bash
#
var1=$(ls /root/code_2)
for i in $var1
do
if [[ "$i" == *".sh" ]];then
$(chmod 755 /root/code_2/$i)
fi
done
C语言风格的for循环语句
for (( a=1; a < 10; a++))
do
commands
done
#!/bin/bash
#
for (( i = 1; i <= 100; i++ ))
do
(( sum+=$i ))
done
echo "1+2+3+4+....+100=$sum"
while循环
语法
while command
do
commands
done
#例
#!/bin/bash
#
num=10
while [ $num -lt 20 ]
do
echo "NUMBER IS $num"
((num+=1))
done
until循环
#while的反向语法,不符合时执行,当command为真时才停止
until command
do
commands
done
break指令
#通过关键字break可以跳出循环
#break后面跟数字,可以指定跳出层级,比如 break 2 可以跳出两个循环
continue指令
#例
#!/bin/bash
#
for (( i=0;i<20;i++ ))
do
if (( i%2==0 ));then
continue
else
echo "$i"
fi
done
Comments NOTHING