1. 将if ...then..fi 写在一行(相比多行写,加了分号)
#!/bin/bash
fullpcapflag=0
if [ $fullpcapflag == 0 ]; then extraceinfo='fullpcap-enabled=0';
elif [ $fullpcapflag == 1 ]; then extraceinfo='fullpcap-enabled=1';fi
echo $fullpcapflag
root@RealEyeServerITS:~/lxj# ./1.sh
fullpcap-enabled=0
2. 定义并使用字典
#!/bin/bash
#必须先定义
declare -A DEFAULT_CONF_FILE
DEFAULT_CONF_FILE=([real]="/conf/ini/real.yaml"
[subo]="/conf/ini/subo.ini"
[manage]="/conf/ini/manage.ini"
#获取所有key
echo ${!DEFAULT_CONF_FILE[*]}
#遍历
for key in $(echo ${!DEFAULT_CONF_FILE[*]})
do
echo $key
echo ${DEFAULT_CONF_FILE[$key]}
done
root@RealEyeServerITS:~/lxj# ./1.sh
subo manage real
subo
/conf/ini/subo.ini
manage
/conf/ini/manage.ini
real
/conf/ini/real.yaml
有一个问题:
操作字典,只可以使用声明的字典名;将字典名赋值给其他变量, 通过变量无法操作字典。
3. 注释多行代码
#!/bin/bash
#单行注释用#
#echo "my name is Han MeiMei"
#多行注释 :<<! !
:<<!
echo "hello"
echo "world"
!
echo "end"
root@RealEyeServerITS:~/lxj# ./1.sh
end
4. (())的使用
符合C语言运算规则的表达式,变量前不需要带$
var=1
t=$((var=var+1)) #任何表达式
echo $t
((var++))
t=$((var*var)) #任何表达式
echo $t
t=$((var++)) #C语言运算
echo $t
for((i=0;i<5;i++));
do
echo $i
done
root@RealEyeServerITS:~/lxj# ./1.sh
2
4
0
1
2
3
4
9
5. [] 的使用
相当与test
字符串比较:只可以用 “==” “!=”, 不可用于整数比较
整数运算:只可以用eq,-gt,-le, --lt等, 不可用于字符串比较
无论字符串还是整数比较,都不可使用大于号、小于号
6.[[ ]]
1)支持模式匹配,支持通配符,字符串比较把右边的左右模式,比如[[ “hello” == “hell?” ]],结果为真
2)条件判断,内部可以使用 && ,|| ,<, >
3) 使用 =~时,支持正则表达式,
4)字符串比较,整数比较,直接用"==" "!=" ">" "<"
#!/bin/bash
var="hello"
tvar="llo"
if [[ $var == *$tvar ]]
then
echo "var 包含 tvar"
fi
if [[ $var =~ $tvar ]]
then
echo "var 包含 tvar"
fi
root@RealEyeServerITS:~/lxj# ./1.sh
var 包含 tvar
var 包含 tvar
7. 流程控制
if ..else..fi语句
1)
if 条件判断
then
fi
2)
if 条件判断
then
else
fi
3)
if 条件判断1
then
elif 条件判断2
then
else
fi
for循环
for 控制语句
do
done
while 循环
while 条件判断
do
done
until, 直到条件满足停止循环
until condition
do
command
done
case
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
case $aNum in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo '你没有输入 1 到 4 之间的数字'
;;
esac
输入 1 到 4 之间的数字:
你输入的数字为:
3
你选择了 3