文章目录
  1. 1. 条件判断
  2. 2. test命令
  3. 3. 分支与循环
    1. 3.1. if条件
    2. 3.2. Case语句
    3. 3.3. for循环
    4. 3.4. While循环

条件判断

  1. 数字的判断

    1
    2
    3
    4
    5
    6
    [ int1 -eq int2 ] 两数相等为真
    [ int1 -ne int2 ] 两数不等为真
    [ int1 -gt int2 ] int1大于int2为真
    [ int1 -ge int2 ] int1大于等于int2为真
    [ int1 -lt int2 ] int1小于int2为真
    [ int1 -le int2 ] int1小于等于int2为真
  1. 文件的判断

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [ -r file ] 用户可读为真
    [ -w file ] 用户可写为真
    [ -x file ] 用户可执行为真
    [ -f file ] 文件为正规文件为真
    [ -d file ] 文件为目录为真 ,即检测目录是否存在。
    [ -c file ] 文件为字符设备文件为真
    [ -b file ] 文件为块设备文件为真
    [ -s file ] 文件大小非0时为真
    [ -t file ] 当文件描述符(默认为1)指定的设备为终端时为真
    [ -e file ] 如果文件存在,则为真。
    [ -L file ] 如果文件为符号链接, 则为真。
  2. 逻辑判断

    1
    2
    3
    [ condition -a condition ] 与
    [ condition -o condition ] 或
    [ condition ! condition ] 非
  3. 字符串判断

字符串的比较,最好使用双中括号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 判断字符串相等
[[ "$str1" = "$str2" ]] 或者 [[ "$str1" == "$str2" ]]
上面两种方式具备相同的功能
[[ "$str" == a* ]] 模式匹配, 如果字符串以a开头,则条件为true
[[ "$str" == "a*" ]] 如果字符串和"a*"相等,则条件为true
[ "$str" == a* ] file globbing(文件通配)
此时的a*会自动匹配到当前以a开头的文件
如果str=ab.txt,并且当前目录中存在ab.txt这个文件,那么上面的条件将会满足
[ "$str" == "a*" ] 如果字符串和"a*"相等,则条件为true
2. 判断字符串不相等
[[ "$str1" != "$str2" ]]
3. 判断字符串不为空,长度大于0
[ -n "$str1" ]
4. 判断字符串为空.就是长度为0.
[ -z "$str1" ]

test命令

基本格式: test expression
test命令返回真(0)或者假(1)

test命令可以理解的表达式类型分为4类

  • 表达式判断
  • 字符串比较
  • 数字比较
  • 文件比较

例如:
if test $var -eq 0 等价于 if [ $var -eq 0 ]

分支与循环

if条件

格式如下:

1
2
3
4
5
6
7
8
9
10
11
if condition; then
commands
fi
if condition; then
commands
elif condition; then
commands
else
commands
fi

使用逻辑运算符简化语句

1
2
[ condition ] && action 如果condition为真,则执行action
[ condition ] || action 如果condition为假,则执行action

Case语句

适用于需要进行多重分支的应用情况。
格式如下:

1
2
3
4
5
6
7
8
9
10
11
case $变量名 in
模式1 )
命令序列1
;;
模式2 )
命令序列2
;;
*)
默认执行的命令序列
;;
esac

case行尾必须为单词“in”,每一个模式必须以右括号“)”结束.
双分号;;表示示命令序列结束.
匹配模式:
可以使用方括号表示一个连续的范围,如[0-9];
竖杠符号|表示或.
*) 表示默认模式,当使用前面的各种模式均无法匹配该变量时,默认模式的命令序列.

for循环

格式如下:

1
2
3
4
5
6
for var in word1 word2 ……
do
command
command
……
done

例:

1
2
3
4
5
#!/bin/sh
for i in {1..10}
do
echo $i
done

注意: 大括号与数字之间不能有空格,上面的脚本i从1到10,中间使用2个点表示, 数字与点之间不能有空格

While循环

格式如下:

1
2
3
4
5
6
while condition
do
command
command
……
done

例:

1
2
3
4
5
6
#!/bin/sh
while [ $# -ne 0 ]
do
echo $1
shift
done

shift使位置变量下移,使$1=$2,$2=$3,最后$#还要减少1,也就是说把第一个参数删除了

文章目录
  1. 1. 条件判断
  2. 2. test命令
  3. 3. 分支与循环
    1. 3.1. if条件
    2. 3.2. Case语句
    3. 3.3. for循环
    4. 3.4. While循环