shell 编程
定义变量 `x=664` 在变量名.等号和值之间不能有空格 输出指令 `echo` echo $x 引号的区别 "" '' ""会将空格和分割都不转意,''会将值原样赋值 export 将变量升为全局变量 $()或`` 可以获取命令的返回值 $? 表示上一个命令退出的状态 $$ 表示当前进程编号 $0 表示当前脚本名称 $n 表示n位置的输入参数(n代表数字,n>=1) $# 表示参数的个数,常用于循环 $*和$@ 都表示参数列表 expr m + n 计算整数计算 $(((2+3)*4)) (2+3)*4计算
- 循环for
for@H_301_11@ n in@H_301_11@ 列表
do@H_301_11@
echo@H_301_11@ $n@H_301_11@
done@H_301_11@或
for@H_301_11@ ((i = 0@H_301_11@; i <= 5@H_301_11@; i++))
do@H_301_11@
echo@H_301_11@ "welcome $i@H_301_11@ times"@H_301_11@
done@H_301_11@
- 循环while
while@H_301_11@ expression
do@H_301_11@
command
…
done@H_301_11@
i=1@H_301_11@
while@H_301_11@ ((i<=3@H_301_11@))
do@H_301_11@
echo@H_301_11@ $i@H_301_11@
let@H_301_11@ i++
done@H_301_11@
- case
case@H_301_11@ $1@H_301_11@ in@H_301_11@
start)
echo@H_301_11@ "starting"@H_301_11@
;;
stop)
echo@H_301_11@ "stoping"@H_301_11@
;;
*)
echo@H_301_11@ "Usage: {start|stop} “ esac@H_301_11@
- if 判断
if@H_301_11@ [ 条件 ]
then@H_301_11@
echo@H_301_11@
elif@H_301_11@ [ 条件 ]
echo@H_301_11@
else@H_301_11@
echo@H_301_11@
fi@H_301_11@
例子
#!/bin/bash@H_301_11@
read@H_301_11@ -p "please input your name:"@H_301_11@ NAME
#printf '%s\n' $NAME@H_301_11@
if@H_301_11@ [ $NAME@H_301_11@ = root ]
then@H_301_11@
echo@H_301_11@ "hello ${NAME}@H_301_11@,welcome !"@H_301_11@
elif@H_301_11@ [ $NAME@H_301_11@ = wang ]
then@H_301_11@
echo@H_301_11@ "hello ${NAME}@H_301_11@,welcome !"@H_301_11@
else@H_301_11@
echo@H_301_11@ "get out here !"@H_301_11@
fi@H_301_11@
条件:非空返回true,可使用$?验证(0为true,>1为false)
[ condition ] && echo OK || echo notok
条件满足,执行后面的语句
常用判断条件
- = 字符串比较
- -lt 小于
- -le 小于等于
- -eq 等于
- -gt 大于
- -ge 大于等于
- -ne 不等于
权限 - -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
- -f 文件存在并且是一个常规的文件
- -s 文件存在且不为空
- -d 文件存在并是一个目录
- -b文件存在并且是一个块设备
- -L 文件存在并且是一个链接
shell 自定义函数
格式:
function name()
{
echo ” “;
return []
}
例子:
#!/bin/bash@H_301_11@
s1=$1@H_301_11@;
s2=$2@H_301_11@;
function sum@H_301_11@@H_301_11@()
{
sum=$(($1@H_301_11@+$2@H_301_11@));
echo@H_301_11@ $((s1+s2));
return@H_301_11@ $sum@H_301_11@;
}
sum 3@H_301_11@ 4@H_301_11@;
total=$?;
echo@H_301_11@ $total@H_301_11@,$?;
注:$?返回上个语句的返回值
sh -vx fun.sh 可以看到执行的过程,但是不停
如图: