免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1174 | 回复: 0
打印 上一主题 下一主题

shell中的判断 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-08 21:57 |只看该作者 |倒序浏览
man test
test(1)                                                                         test(1)
名前
       test - ファイル形式のチェックや値の比較を行う
書式
       test [expr]
       test [--help] [--version]
説明
       test  は条件式 expr を評価した結果によって、 0 (真) または 1 (偽) を終了ステータ
       スとして返す。
       式の各部分はそれぞれ分離された引数でなければならない。式は単項式あるいは二項式で
       ある。 test はファイルのステータス調査、文字列操作、数値の比較演算を行うことがで
       きる。
       ほとんどのシェルには同名の組み込みコマンドがあるので、単に ‘test’ として実行する
       と、ここで記述されたものとは異なった機能のものが実行されるだろう。
   ファイル形式のテスト
       -b file
              file が存在し、ブロックスペシャルファイルであれば真。
       -c file
              file が存在し、キャラクタスペシャルファイルであれば真。
       -d file
              file が存在し、ディレクトリであれば真。
       -f file
              file が存在し、通常ファイル (regular file) であれば真。
       -h file
       -L file
              file が存在し、シンボリックリンクであれば真。
       -p file
              file が存在し、名前付きパイプ (named pipe) であれば真。
       -S file
              file が存在し、ソケットであれば真。
       -t [fd]
              fd が端末でオープンされていれば真。 fd が省略された場合のデフォルト値は 1
              (標準出力)。
   ファイルのパーミッションのテスト
       -g file
              file が存在し、set GID されていれば真。
       -k file
              file が存在し、 sticky ビットが立っていれば真。
       -r file
              file が存在し、読み取り可能であれば真。
       -u file
              file が存在し、 set SUID されていれば真。
       -w file
              file が存在し、書き込み可能であれば真。
       -x file
              file が存在し、実行可能であれば真。
       -O file
              file が存在し、現在の実効ユーザー id による所有であれば真。
       -G file
              file が存在し、現在の実効グループ id による所有であれば真。
   ファイル特性のテスト
       -e file
              file が存在すれば真。
       -s file
              file が存在し、サイズが 0 より大きければ真。
       file1 -nt file2
              file1 が file2 より (修正時刻で比較して) 新しければ真。
       file1 -ot file2
              file1 が file2 より古ければ真。
       file1 -ef file2
              file1 と file2 のデバイス番号と i-ノード番号が共に等しければ真。
   文字列のテスト
       string
       -n string
              string の長さが 0 より大きければ真。
       -z string
              file が存在し、読み取り可能であれば真。
       -u file
              file が存在し、 set SUID されていれば真。
       -w file
              file が存在し、書き込み可能であれば真。
       -x file
              file が存在し、実行可能であれば真。
       -O file
              file
*****************************************************************************************************
*****************************************************************************************************
shell判断文件,目录是否存在或者具有权限
2008-09-01 16:23
#!/bin/sh
myPath="/var/log/httpd/"
myFile="/var /log/httpd/access.log"
#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi
#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi
#这里的-f参数判断$myFile是否存在
if [ ! -f "$myFile" ]; then
touch "$myFile"
fi
#其他参数还有-n,-n是判断一个变量是否是否有值
if [ ! -n "$myVar" ]; then
echo "$myVar is empty"
exit 0
fi
#两个变量判断是否相等
if [ "$var1" = "$var2" ]; then
echo '$var1 eq $var2'
else
echo '$var1 not eq $var2'
fi
========================================
shell 判断语句
流程控制 "if" 表达式 如果条件为真则执行then后面的部分: if ....; then
....
elif ....; then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…   通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等          -r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真
######################################################### 含条件选择的shell脚本
    对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包 括比较运算、判断文件是否存在等。基本的if条件命令选项有: -eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在
几 乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。 ################################################################## 判断文件是否存在 #!/bin/sh
today=`date -d yesterday +%y%m%d`
file="apache_$today.tar.gz"
cd /home/chenshuo/shell
if [ -f "$file" ];then
echo "OK"
else
echo "error $file" >error.log
mail -s "fail backup from test" chenshuo@soufun.com
fi


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/82363/showart_1959077.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP