shell 笔记2

来源:互联网 发布:php socket了解 编辑:程序博客网 时间:2024/06/05 04:39
16.条件测试
1)测试文件类型:
test -e 文件名; 测试文件是否存在,存在为真
等效为:[ -e 文件名 ] 注意:[ ]中必须有空格
-f:判断是否是普通文件
-d:判断是否为目录
-b:判断是否为块设备文件
-c:字符设备文件

2)测试文件权限
test -r 文件名;判断是否有可读权限
-w:可写
-x:可执行
-s:判断是否为非空白,有内容为真

3)两个文件比较
[ file1 -nt file2]:file1是否比file2新
[ file1 -ot file2]:file1是否比file2旧
[ file1 -ef file2]:file1与file2是否是链接文件

4)两个数值之间判断
[ n1 -eq n2 ]:n1和n2是否相等
[ n1 -ne n2 ]:n1和n2是否不等
[ n1 -gt n2 ]:n1大于n2
[ n1 -lt n2 ]:n1小于n2
[ n1 -ge n2 ]:n1大于等于n2
[ n1 -le n2 ]:n1小于等于n2

5)判断字符串
[ -z 字符串 ]:判断字符串是否为空
[ 字符串1==字符串2 ]: 判断字符串1是否与字符串2相等
[ 字符串1!=字符串2 ]:判断字符串1是否与字符串2不相等

6)多重判断
-a:逻辑与
-o:逻辑或
!:逻辑非

Esc键下面的反引号括起来的是命令,命令的结果可以被赋值给变量。

17.流程控制
1)if语句
单分支判断:
if 条件测试指令
then 命令序列
fi
双分支:
if 条件测试指令
then 命令序列
else 命令序列
fi

实例:判断Apache服务是否启动,没有启动则自动启动
#!/bin/bash
http=`netstat -tlun | awk '{print $4 "\n"}' | grep ":80$"`
(或http=$(ps aux | grep httpd | grep -v grep))
if [ -z "$http" ]
then
echo "httpd meiyouqidong!"
/etc/rc.d/init.d/httpd start
else
echo "httpd running"
fi
多分支
格式:
if 条件1 ; then
命令1
elif 条件2 ; then
命令2
......
else
命令n
fi


2)for语句
1.使用in关键字循环
根据变量的不同取值,重复执行一组命令操作
格式:
for 变量名 in 取值列表
do
命令列表
done

实例:打印输入目录下的所有文件或者路径
#!/bin/bash
read -p "please input a directory name: " -t 60 filename
fi [ -z $filename ];then
echo "please input !!!!"
exit 1
fi
#如果字符串为空,报错跳出
if [ ! -e $filename ]
then
echo "$filename not cunzai!!"
exit 2
fi
#如果文件不错在,报错跳出
if [ ! -d $filename ]
then
echo "$filename is not driectory"
exit 3
fi
#如果不是目录,报错跳出
file=$(ls $filename)
for test in $file
do
echo $test
done

3)while循环语句
重复测试指定的条件,只要条件成立反复执行对应的命令操作
格式:
while 指令
do
命令列表
done
4) case多重分支语句
根据变量的不同取值,分别执行不同的命令操作
实例:
#!/bin/bash
echo -e "shanghai:1\n"
echo -e "beijing:2\n"
echo -e "chengdu:3\n"
read -p "input your choice:" -t 60 choci
case $choci in
"1")
echo "shanghai!!!!"
;;
"2")
echo "beijing!!!!"
;;
"3")
echo "chengdu!!!"
;;
*)
echo "qingchongxinshuru!"
;;
esac











0 0