`

shell判断和比较

 
阅读更多

shell判断和比较

1  shell 的$! ,$?, $$,$@

 

  • $n        $1 the first parameter,$2 the second...
  • $#        The number of command-line parameters.
  • $0        The name of current program.
  • $?        Last command or function's return value.
  • $$        The program's PID.
  • $!        Last program's PID.
  • $@        Save all the parameters.


almost any shell book will talk about them,from which you can get their detail usages.

2    Linux SHELL if 命令参数说明

  • –b 当file存在并且是块文件时返回真
  • -c 当file存在并且是字符文件时返回真
  • -d 当pathname存在并且是一个目录时返回真
  • -e 当pathname指定的文件或目录存在时返回真
  • -f 当file存在并且是正规文件时返回真
  • -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
  • -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
  • -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
  • -p 当file存在并且是命令管道时返回为真
  • -r 当由pathname指定的文件或目录存在并且可读时返回为真
  • -s 当file存在文件大小大于0时返回真
  • -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
  • -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
  • -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

UNIX Shell 里面比较字符写法:

  • -eq   等于
  • -ne    不等于
  • -gt    大于
  • -lt    小于
  • -le    小于等于
  • -ge   大于等于
  • -z    空串
  • =     两个字符相等
  • !=    两个字符不等
  • -n    非空串

总结:

文档比较运算符  
-e filename  假如 filename存在,则为真  [ -e /var/log/syslog ] 
-d filename  假如 filename为目录,则为真  [ -d /tmp/mydir ] 
-f filename  假如 filename为常规文档,则为真  [ -f /usr/bin/grep ] 
-L filename  假如 filename为符号链接,则为真  [ -L /usr/bin/grep ] 
-r filename  假如 filename可读,则为真  [ -r /var/log/syslog ] 
-w filename  假如 filename可写,则为真  [ -w /var/mytmp.txt ] 
-x filename  假如 filename可执行,则为真  [ -L /usr/bin/grep ] 
filename1-nt filename2  假如 filename1比 filename2新,则为真  [ /tmp/install/etc/services -nt /etc/services ] 
filename1-ot filename2  假如 filename1比 filename2旧,则为真  [ /boot/bzImage -ot arch/i386/boot/bzImage ] 
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)  
-z string  假如 string长度为零,则为真  [ -z "$myvar" ] 
-n string  假如 string长度非零,则为真  [ -n "$myvar" ] 
string1= string2  假如 string1和 string2相同,则为真  [ "$myvar" = "one two three" ] 
string1!= string2  假如 string1和 string2不同,则为真  [ "$myvar" != "one two three" ] 
算术比较运算符  
num1-eq num2  等于 [ 3 -eq $mynum ] 
num1-ne num2  不等于 [ 3 -ne $mynum ] 
num1-lt num2  小于 [ 3 -lt $mynum ] 
num1-le num2  小于或等于 [ 3 -le $mynum ] 
num1-gt num2  大于 [ 3 -gt $mynum ] 
num1-ge num2  大于或等于 [ 3 -ge $mynum ]

本文摘自网络

+++++++++++++++++++++++++++++++++++++++++++

shell判断文件,目录是否存在或者具有权限

文章来源:http://hi.baidu.com/haigang/blog/item/e5f582262d639c118b82a167.html
#!/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
注意:if 的格式,语句中的空格不能少。
========================================
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" test@test.com <error.log
fi
分享到:
评论

相关推荐

    shell 判断ip同网段

    shell 判断输入的ip是否和本机的ip同网段 包含两种实现方法

    shell字符串比较判断是否为数字

    除了字符串和数字的比较,Shell还提供了对文件类型的判断功能: - **-b(块设备文件)** - **-c(字符设备文件)** - **-d(目录)** - **-e(文件或目录存在)** - **-f(普通文件)** - **-g(设置了SGID位)** - ...

    shell判断cpu架构

    shell判断cpu架构

    shell编程 之 数字 字符 文件 等判断相等否

    详细介绍了shell编程中的判断 数字 字符 文件名 等是否相等,匹配。附有详细的演示截图。在CentOs 6中演示。

    shell判断一个进程是否存在

    ### Shell判断一个进程是否存在 在日常的系统管理和自动化运维任务中,经常需要判断某个特定的进程是否正在运行。这样的需求通常出现在Shell脚本中,通过判断进程的状态来执行不同的操作或者逻辑。例如,在某些场景...

    读取文件SHELL并判断文件生成时间,低于5分钟文件不拷贝。

    读取文件SHELL并判断文件生成时间,考虑到文件可能没有生成完,低于5分钟文件不拷贝。并且可以循环处理,分别判断生成的时间

    linux shell 判断平闰年,判断输入日期是星期几,两个日期之间的间隔天数

    这是linux shell判断平闰年,输入正确格式日期就可以判断这是一个平年还是闰年,输入正确格式日期就可以判断在该日期下是星期几,而且输入两个日期还可以判断这两个日期之间间隔了几天,可以正确使用,你们也可以...

    Linux Shell字符串比较

    Shell提供了多种方式进行整数的比较,包括使用`[`和`[[`这两种不同的语法结构。 ##### 基本语法 - `-eq`:判断两个整数是否相等。 - `-ne`:判断两个整数是否不相等。 - `-gt`:判断左边的整数是否大于右边的整数...

    shell脚本判断文件夹或目录是否存在,不存在则创建新文件夹或目录.sh

    shell自动化脚本,自动判断文件夹(目录)是否存在,如不存在自动创建,可执行,下载可测试

    linux中shell的表达式比较

    不同的Shell有不同的语法和特性,其中Bash(Bourne-Again SHell)和tcsh(C Shell的扩展版)是最常见的两种。本文将详细探讨这两种Shell中的表达式比较,包括字符串比较、数字比较、文件操作以及逻辑操作符。 首先...

    shell查看返回值,shell查看返回值,shell查看返回值,

    **文件`shell判断输入的参数是否正确.txt`相关:** 在编写接受用户输入的Shell脚本时,我们需要验证参数是否满足特定条件。例如,可以使用`if`语句检查参数数量或类型: ```bash if [ $# -ne 1 ]; then echo "Usage...

    Shell脚本—判断循环

    本章节将从Shell脚本的基础出发,深入探讨循环和判断语句的具体应用,包括如何监控程序、管理进程、监控磁盘空间,以及如何操作数据文件等关键知识点。 #### 监控程序与进程管理 ##### 查看进程:ps与top命令详解 ...

    shell脚本比较两台服务器目录及文件是否一致

    - 比较两个文本文件中的MD5值,判断文件是否一致。 - 输出不一致的文件列表,包括只存在于一台服务器的文件以及内容发生变化的文件。 #### 脚本详解 1. **定义变量**: - `local_dir`:本地服务器的目录路径。 -...

    shell编程和unix命令

    例如,`if`语句用于条件判断,`for`和`while`循环用于迭代操作,`function`关键字用于定义自定义函数。Shell还支持变量和参数,使得脚本具有更高的灵活性。 在压缩包子文件的文件名称列表中,虽然具体文件内容未知...

    Linux shell数组循环的实例详解

    shell数组循环 测试shell数组,循环的例子: arr=(a b c) echo 所有的内容如下:${arr[@]} echo 数组的长度:${#arr[*]} ... 您可能感兴趣的文章:Shell获取字符串长度的多种方法总结用Shell判断字符串包含

    shell运算符介绍和例子

    shell运算符介绍和例子 shell运算符是指在shell脚本中使用的运算符,包括算术运算符...shell运算符是shell脚本中的一种重要工具,可以帮助开发者实现各种计算、比较和逻辑判断等操作,提高shell脚本的灵活性和强大性。

    Shell课程视频.zip

    06Shell 系统变量和自定义变量案例.mp4 07Shell $n案例.mp4 08Shell $#案例.mp4 09Shell $※$@案例.mp4 10Shell $?案例.mp4 11Shell 运算符.mp4 12Shell 条件判断案例.mp4 13Shell 回顾.mp4 14Shell if案例.mp4 15...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    Shell编程和Unix命令.pdf

    "Shell编程和Unix命令.pdf" 本资源主要讲解 Unix 命令和 Shell 编程相关的知识点。下面是从文件的标题、描述、标签和部分内容中提取的知识点: 文件安全与权限 文件安全是 Unix 操作系统安全的一个重要方面。为了...

    linux shell编程if语句内判断参数详解

    在 Linux Shell 编程中,if 语句可以使用文件比较运算符来判断文件或目录的状态。这些运算符包括: * -b:判断文件是否存在并且是块文件 * -c:判断文件是否存在并且是字符文件 * -d:判断 pathname 是否存在并且是...

Global site tag (gtag.js) - Google Analytics