Linux常用命令之shell编程(七)
#!/bin/sh:指定执行脚步的shell
#:注释行
1.设置变量:
s1="content"
s2=$s1
s3="${s1}_test"
s4=`date`
2.特殊变量
$0:这个程序的文件名
$n:第n个参数,n=1-9
$*:这个程序的所有参数
$#:这个程序的参数个数
$$:这个程序的PID
$?:执行上一个命令的返回值,0:success非0:error
还有一个特殊用法,打印长度:
var=1234567890
echo${#var}
10
3.从键盘读入数据
read变量:此时会等待用户键入变量值
read变量1变量2变量3:可以设置多个
4.算术运算
expr3+5
expr$var-5
expr100/5
expr2\*4:*号要进行转意
expr`expr5+7`/3
var1=`expr3+5`
expr\(3+5\)/2:括号要转意
bash中,变量自增的五种方法:
i=0
1.i=`expr$i+1`
2.leti+=1
3.((i++))
4.i=$[$i+1]
5.i=$(($i+1))
5.测试语句test==[]
1)字符串
str1=str2:测试字符串是否相等
str1!=str2:测试字符串是否不等
-zstr:测试字符串是否为空
-nstr:测试字符串是否不为空
2)整数
int1-eqint2:测试整数是否相等
int1-geint2:测试是否大于等于
int1-gtint2:测试是否大于
int1-leint2:测试是否小于等于
int1-ltint2:测试是否小于
int1-neint2:测试是否不相等
3)文件
-dfile:是否为目录
-ffile:是否为常规文件
-xfile:是否可执行
-rfile:是否可读
-wfile:是否可写
-afile:是否存在
-sfile:文件大小是否非0
6.流程控制
exit0:正常退出
exit1:非0,非正常退出
-a:逻辑与,两个条件同时成立,结果为真
-o:逻辑或,两个条件只要有一个成立,结果为真
7.if条件判断
if[-d$file];then
…………
fi
if[-d$file];then
…………
else
…………
fi
if[-d$file];then
…………
elif[-f$file];then
…………
else
…………
fi
if[-d$file-o-f$file];then
…………
fi
8.for循环
for变量in列表
do
……
done
例子:
fordayinSunMonTueWedThuFriSat
do
echo"Thedayis:$day"
done
forlinein`catfile`
do
echo$line
done
9.select选项列表
select把关键字中的每一项做成类似表单,以交互执行do和done之间的命令
select变量in关键字
do
command1
command2
……
done
例子:select.sh
selectvarin"Linux""UNIX""Windows""Other"
do
echo"Youhaveselected$var"
break
done
显示结果:
#shselect.sh
1)Linux
2)UNIX
3)Windows
4)Other
#?1
YouhaveselectedLinux
10.case条件匹配
case变量in
字符串1)命令列表
;;
字符串2)命令列表
;;
*)命令列表:其它情况
;;
esac
例子:
var="start"
case"$var"in
start)
echo"start"
;;
reload)
echo"reload"
;;
stop)
echo"stop"
;;
status)
echo"status"
;;
*)
echo"$0:Usage:$0{start|status|stop|reload}"
exit1
;;
esac
11.while循环
int1=0
while[$int1-le100]
do
echo$int1
int1=`expr$int1+1`
done
12.until循环:类似while,不同点时条件判断为假时才执行
int1=100
until[$int1-eq0]
do
echo$int1
int1=`expr$int1-1`
done
13.跳出循环
break:跳出整个循环
continue:跳过本次循环,进行下次循环
14.shift指令
每执行一次,参数序列顺序左移一个位置,$#的值减1,移出去的参数不在可用
例子:参数为12345
#!/bin/sh
if[$#-le0]
then
echo"Notenoughparameters"
exit0
fi
sum=0
while[$#-gt0]
do
sum=`expr$sum+$1`
shift#因为每次执行shift,所以上面的$1永远都是下一个参数
done
echo$sum
15.函数
函数定义:
函数名(变量1,变量2,……)
{
命令序列
}
变量均为全局变量,shell没有局部变量,函数的变量参数在方法体内引用时$1,$2,……
例子:
stop(){
echo-n$"Stopping$prog:"
killallnginx
RETVAL=$?
echo
[$RETVAL=0]&&rm-f$nginx_pid/var/lock/subsys/$prog
}
函数调用:
函数名
case"$1"in
stop)
stop
;;
*)
echo$"Usage:$0{start|stop|reconfigure|status}"
exit1
esac
16.脚步调试
sh-x脚步:执行脚步,并显示全部过程
sh-n脚步:不执行脚步,只检查语法错误
17.dos2unix
如果在windows环境下编写的脚步,上传到linux后需要先执行dos2unix进行编码转换,否则不能正确执行
dos2unix*.sh