shell if

转载 2017年06月20日 11:30:58

比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

注意:这里的空格很重要。要确保方括号的空格。笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。

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命令选项在执行某一文件之前检查它是否存在。

下面举二个例子吧,以方便大家的理解。

1、判断文件是否存在

#!/bin/sh
# 判断文件是否存在
# link:www.jb51.net
# date:2013/2/27

YACCESS=`date -d yesterday +%Y%m%d`
FILE="access_$YACCESS.log.tgz"
cd /data/nginx/logs
if [ -f "$FILE" ];then
echo "OK"
else
echo "error $FILE" > error.log
mail -s "$FILE backup fail" test123@jb51.net <error.log
fi



#!/bin/sh
# 清除相关文件,并按时间段记录日志
# link:www.jb51.net
# date:2013/2/27
#
DIR=/data/img_cache
DAY=`date +"%Y-%m-%d %H:%M"`
NUM=`ls $DIR |wc -l`
DIRNAME=`ls $DIR| grep leveldb | head -n 1 | awk '{print $NF}'`
if [[ $NUM -gt 3 ]];then
  rm -rf $DIR/$DIRNAME
  echo "---------$DAY----($DIR)-----------------------" >> /tmp/img_cache.log
  echo "$DIRNAME Deleted successful" >> /tmp/img_cache.log
fi


Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第...
  • u011341352
  • u011341352
  • 2016年11月18日 13:05
  • 7768

shell中$(( ))与$( )还有${ }的区别

原文地址:http://blog.zol.com.cn/2322/article_2321763.html $( )与` `(反引号) 在bash shell中,$( )与` `(反引号)都是用来做...
  • tg5156
  • tg5156
  • 2014年02月18日 13:46
  • 9693

shell中的${},##, %% , :- ,:+, ? 的使用

假设我们定义了一个变量为: file=/dir1/dir2/dir3/my.file.txt 可以用${ }分别替换得到不同的值: ${file#*/}:删掉第一个/ 及其左边的字符串:dir...
  • lee244868149
  • lee244868149
  • 2015年11月11日 14:29
  • 4042

shell中各种括号的作用()、(())、[]、[[]]、{}

一、小括号,园括号()   1、单小括号 ()     ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令...
  • taiyang1987912
  • taiyang1987912
  • 2014年09月26日 11:13
  • 118754

shell脚本中的read

Read的一些选项  Read可以带有-a, -d, -e, -n, -p, -r, -t, 和 -s八个选项。 -a :将内容读入到数值中 read -a array -d :表示d...
  • xinguimeng
  • xinguimeng
  • 2016年09月02日 09:22
  • 1218

shell 中if判读使用总结

总结一下shell 编程常使用的if判断 一、if的基本语法: if [ command ];then    符合该条件执行的语句 elif [ command ];then ...
  • suofeng1234
  • suofeng1234
  • 2016年06月28日 18:16
  • 3556

shell中条件判断if中的-a到-z的意思

[-a file] 如果file存在则为真 [-b file] 如果file存在且是一个块特殊文件则为真 [-c file] 如果file存在且是一个字特殊文件则为真 [-d file] 如果f...
  • vergilgeekopen
  • vergilgeekopen
  • 2017年04月07日 03:15
  • 1132

Shell编程中的数组定义、遍历

数组定义: 1arr=(1 2 3 4 5) # 注意是用空格分开,不是逗号!!数组定义法2: 1 2 3 4 ar...
  • xujingzhong0077
  • xujingzhong0077
  • 2016年12月15日 10:56
  • 15032

linux shell编程多线程和wait命令学习

最近在使用shell做一些部署工作,在使用过程中,效率
  • shuanghujushi
  • shuanghujushi
  • 2014年07月27日 22:37
  • 18654

Shell函数的7种用法介绍

这篇文章主要介绍了Shell函数的7种用法介绍,本文讲解了在shell文件内部定义函数并引用、返回值、函数输出、向函数传递参数、全局变量与局部变量等内容,需要的朋友可以参考下。 1. 在shel...
  • foreverfriends
  • foreverfriends
  • 2017年04月18日 14:16
  • 354
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell if
举报原因:
原因补充:

(最多只允许输入30个字)