1. 单个小括号()
命令替换$(cmd),看如下示例:
//现有如下文件,用脚本提取后面数字
[root@localhost ~]
anaconda-ks.cfg passwd test.sh
[root@localhost ~]
password 793127948
//等同于`cmd`
[root@localhost ~]
pass=`grep password ~/passwd|awk '{print $NF}'`
echo $pass
passwd=$(grep password ~/passwd|awk '{print $NF}')
echo $passwd
[root@localhost ~]
793127948
793127948
数组赋值
[root@localhost ~]
//现有如下数组
num=(a b c d)
echo ${#num[*]}
echo ${#num[@]}
echo ${num[1]}
echo ${num[0]}
[root@localhost ~]
4
4
b
a
命令组
[root@localhost ~]
(ls ~;date)
//括号中的命令将会新开一个子shell顺序执行,括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
[root@localhost ~]
anaconda-ks.cfg passwd test.sh
2022年 03月 02日 星期三 11:20:09 CST
2.两个小括号(())
用于算术运算,只支持整数类型的运算,不支持浮点型,双小括号中的变量可以不使用$符号前缀,括号内支持多个表达式用分号分开, 只要括号中的表达式符合C语言运算规则, 甚至是三目运算符,都可以使用双小括号。 最常用的是在for循环。
[root@localhost ~]
for ((i=0;i<6;i++));do
echo "$i"
done
[root@localhost ~]
0
1
2
3
4
5
//重定义变量值
[root@localhost ~]
((num++))
echo "$num"
[root@localhost ~]
9
3. 单中括号[]
一般进行算术比较,脚本中使用较多。比较的话==和!=只支持字符串比较,-eq,-gt,-lt > < 支持数字类型比较,但是中括号中可不能使用 && 这类的符号哦,若想使用就得使用双中括号[[]]。在使用单中括号的时候,注意两边的空格。
4.双中括号[[]]
[[ ]] 多用来进行字符串比较, 比如两个字符串是否相同, [[ $var1 == $var2 ]] bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。使用[[ … ]]条件判断结构,而不是[ … ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,可能会报错。
[root@localhost ~]
if [ `uname` == "Linux" && `whoami` == "root" ];then
echo "3"
else
echo "4"
fi
[root@localhost ~]
test1.sh: 第 2 行:[: 缺少 `]' //这里会报错说少中括号
4
[root@localhost ~]# vim test1.sh
#!/bin/bash
if [[ `uname` == "Linux" && `whoami` == "root" ]];then
echo "3"
else
echo "4"
fi
[root@localhost ~]
3
5.大括号{}
对大括号中的内容进行扩展。大括号中,不允许有空白,除非这个空白被引用或转义。
[root@localhost ~]
1 2 3 4 5
6. ||逻辑或
语法:command1 || command2 左边的命令返回为假才会执行右边的命令,只要有一个返回为真,后面的命令都不会被执行。
[root@localhost ~]
a=88
if [ $a -gt 100 ] || [ $a -gt 90 ] || [ $a -gt 80 ];then
echo "0"
else
echo "1"
fi
[root@localhost ~]
0
7.&&逻辑与
语法:command1 || command2 左边的命令返回为真才会执行右边的命令,只要有一个返回为假,后面的命令都不会被执行。
[root@localhost ~]
if [ `whoami` == "root" ] && [ `uname` == "Linux" ];then
echo "true"
else
echo "false"
fi
[root@localhost ~]
true
|