`
sundful
  • 浏览: 1253361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

判断Shell程序输入参数的个数

 
阅读更多

if [ $# != 1 ] ; then 
echo "USAGE: $0 TABNAME" 
echo " e.g.: $0 CDR_CALL_20040701" 
exit 1; 
fi 

位置参数 $1, $2,..., $N,$#代表了命令行的参数数量, $0代表了脚本的名字 
-ne    不等于 

----------------------- 
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 ] 

脚本示例: 

#!/bin/bash 

# This script prints a message about your weight if you give it your 

# weight in kilos and hight in centimeters. 

if [ ! $# == 2 ]; then 

echo "Usage: $0 weight_in_kilos length_in_centimeters" 

exit 

fi 

weight="$1" 

height="$2" 

idealweight=$[$height - 110] 

if [ $weight -le $idealweight ] ; then 

echo "You should eat a bit more fat." 

else 

echo "You should eat a bit more fruit." 

fi 

# weight.sh 70 150 

You should eat a bit more fruit. 

# weight.sh 70 150 33 

Usage: ./weight.sh weight_in_kilos length_in_centimeters 

位置参数 $1, $2,..., $N,$#代表了命令行的参数数量, $0代表了脚本的名字, 

第一个参数代表$1,第二个参数代表$2,以此类推,参数数量的总数存在$#中,上面的例子显示了怎么改变脚本,如果参数少于或者多余2个来打印出一条消息。 

执行,并查看情况。 

# bash -x tijian.sh 60 170 

+ weight=60 

+ height=170 

+ idealweight=60 

+ '[' 60 -le 60 ']' 

+ echo 'You should eat a bit more fat.' 

You should eat a bit more fat. 

其中-x用来检查脚本的执行情况。

分享到:
评论

相关推荐

    Shell编程实验讲稿

    `$#`变量存储了命令行参数的个数,这对于检查用户输入的参数数量是否符合预期非常有用。比如,如果一个脚本需要三个参数,可以检查`$#`是否等于3。`$*`变量则包含了所有传递给程序的参数,适用于处理参数数量不固定...

    shell、awk编程教材

    SHELL程序由一系列命令组成,这些命令可以是系统内置的或者外部可执行文件。它们按照特定的顺序执行,可以读取、处理数据,并根据需要改变系统状态。 **四、SHELL基本知识** **4.1 特殊符号** SHELL中有很多特殊...

    linux shell

    预定义变量是Shell内部已经设定好的特殊变量,如`$#`表示位置参数的个数,`$*`是所有位置参数的值,`$?`记录命令执行后的退出状态,`$$`是当前进程的PID,`$!`则保存了最后一个后台进程的PID。 Shell脚本中的控制...

    linux-shell脚本命令:awk命令简介

    - ARGC:表示命令行参数的个数。 - ARGV:表示命令行参数数组。 - ARGIND:表示当前被处理文件的ARGV标志符。 - NR:表示已经读出的记录数。 - FNR:表示当前文件的记录数。 - FS:表示输入字段分隔符,默认为空格。...

    嵌入式linux-期末考试题含答案.doc

    - Shell程序编写完成后,不需要用gcc编译器,可以直接运行(选项A错误)。 - Shell程序可以通过`sh`命令或者赋予执行权限后直接运行(选项B正确)。 - Shell函数可以有参数(选项C错误)。 - Linux遵循GPL许可证...

    第 3 章 操作系统知识1

    另一道关于UNIX Shell程序的题目,涉及到了对命令行参数的处理。在UNIX Shell中,$#变量保存了命令行参数的个数,因此当用户输入的命令参数为1时,应使用$#来判断。题目要求当命令参数个数为2时执行特定命令,这里填...

    pwn基础复习巩固19_7_181

    gdb插件可以用来生成pattern和判断溢出字符的个数。例如,可以使用以下命令来生成XX个字符: `cyclic -l 0x某某地址` 然后,可以使用pattern.py脚本来制造XX个字符: `python pattern.py create XX` execve系统...

    delphi 开发经验技巧宝典源码

    0171 判断字符在字符串中出现的个数 111 0172 在语句中查找汉字的个数 112 0173 如何统计中英文个数 112 5.5 字符串的其他操作 113 0174 返回指定字符串的起始位置 113 0175 获得汉字的拼音简码 113 ...

    UNIX_Linux_教程

    - **内部变量**包括`ARGC`(命令行参数的个数)、`ARGV`(命令行参数数组)、`FILENAME`(当前输入文件名)等,这些变量主要用于控制程序的执行流程或获取系统信息。 - **用户自定义变量**用于存储程序运行过程中...

    嵌入式软件面试题整理.pdf

    #### 计算一个数中1的个数和判断一个数是不是2的幂 - **计算1的个数**:可以通过位运算来逐位检查。 - **判断是否为2的幂**:利用 `num & (num - 1)` 的结果是否为0来判断。 #### 几个查找指令(type、whereis、...

    delphi 开发经验技巧宝典源码06

    0171 判断字符在字符串中出现的个数 111 0172 在语句中查找汉字的个数 112 0173 如何统计中英文个数 112 5.5 字符串的其他操作 113 0174 返回指定字符串的起始位置 113 0175 获得汉字的拼音简码 113 ...

    (重要)AIX command 使用总结.txt

    mkuser id=101 pgrp=informix home=/opt/informix shell=/usr/bin/csh informix //创建用户informix,命令参数说明 //id:指定用户的id号,请根据规划设置; //pgrp:指定该用户的归属组,请根据规划设置; //home:指定...

Global site tag (gtag.js) - Google Analytics