用户变量
在变量名、等号、值之间不能出现空格;
定义变量不需要$符号,使用变量需要使用$符号
# 赋值
var1=10
# var1赋值给var2
var2=$var1
# 赋值
var3=testing
# var3赋值给var4
var4="this is $var3"
# \ 转义字符,表示15美元
var5="she cost \$15"
命令替换
将命令的输出结果赋值给变量,有如下两种格式
- 反引号字符(`)
- $() 格式
# date命令格式话为yyyyMMdd,并赋值给var1
var1=`date + %Y%m%d`
# date命令格式化为yyyyMMdd,并赋值给var2
var2=$(date + %Y%m%d)
输出重定向
格式1:command > outputfile
格式2:command >> outputfile
说明,> 表示如果已存在outputfile,则会覆盖原来的文件
>> 表示如果已存在outputfile,则在文件末尾增量添加结果值
数学运算
格式:$[operation]
# 2*5算术结果赋值给var1
var1=$[2*5]
# var1*2的算术结果赋值给var2
var2=$[$var1 * 2]
退出状态码
exit命令,值为命令行的最后一个命令或者shell脚本最后一个命令的状态值;同样也可以用户指定输出;
注意exit的值范围是0-255,其中0为正常状态
var1=1
var2=2
# 最后一个命令
var3=$[$var1 + $var2]
# 输出脚本状态码
exit $?
# 自定义脚本状态码输出
exit $var1
结构化命令—if命令
其中if / elif 后面可以是command命令或者test命令
- command,是执行的命令结果的状态码,0表示正常,如上。
- test命令包括,数值比较、字符串比较、文件比较,格式为:if [ test ],其中中括号两边与test有空格。
格式:
# if-then格式
if command
then
commands
fi
# if-then-else 格式
if [ 1>2]
then
commands
else
commands
if
# if-then-elif-then
if command1
then
commands
elif command2
then
commands
fi
结构化命令—case命令
语法:
case variable in
pattern1 | parttern2)
commands1;;
parttern3)
commands2;;
*)
commands3;;
esac
结构化命令—for命令
语法
for var in list
do
commands
done
案例
# 遍历 A B C
for var in A B C
do
echo $var
done
# 遍历list
list="A B C"
for var in $list
do
echo $var
done
#从命令中读取值:$(command)
file="states"
for state in $(cat $file)
do
echo $state
done
# 下标
for ((i=1; i<=10; i++))
do
echo $i
done
结构化命令—while命令
语法与示例:
# 语法
while commands
do
other commands
done
#示例
var=10
while $[ $var gt 0 ]
do
echo $var
var=$[ var - 1 ]
done
格式化命令—until
条件与while相反,其他一样