设为首页 收藏本站
查看: 813|回复: 0

Shell 参数等等

[复制链接]

尚未签到

发表于 2018-8-24 10:13:26 | 显示全部楼层 |阅读模式
  $# 传送给命令Shell的参数序号
  $- 在Shell启动或使用set命令时提供选项
  $? 上一条命令执行后返回的值
  $$ 当前shell的进程号
  $! 上一个子进程的进程号
  $@ 所有的参数,每个都用双括号括起
  $* 所有参数,用双括号括起
  $n 位置参数值,n表示位置
  $0 当前shell名
  1.测试文件状态
  test一般有两种格式,即:
  test condition
  或
  [ condition ]
  使用方括号时,要注意在条件两边加上空格。
  一般采用第2种方式,比较方便。
  测试文件状态的条件表达式很多,下面是一个常用的文件状态列表。
  文件状态测试
  -a 文件存在
  -b 文件存在并且是块文件
  -c 文件存在并且是字符文件
  -d 文件存在并且是目录
  -s 文件长度大于0、非空
  -f 文件存在并且是正规文件
  -w 文件存在并且可写
  -L 文件存在并且符号连接
  -u 文件有suid位设置
  -r 文件存在并且可读
  -x 文件存在并且可执行
  file1 -nt file2 file1的修改时间比file2的修改时间晚,或者是 file1存在,file2不存在
  file1 -ot file2 file1的修改时间比file2的修改时间早,或者是 file2存在,file1不存在
  注意:0表示成功,其他为失败。
  例:
  [test@test ~]$ ll test.txt
  -rw-rw-r-- 1 test test 3 2008-08-22 16:30 test.txt
  [test@test ~]$ [ -f test.txt ]
  [test@test ~]$ echo $?
  0
  [test@test ~]$ [ -d test.txt ]
  [test@test ~]$ echo $?
  1
  2.逻辑操作符
  测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此
  功能。
  -a 逻辑与,操作符两边均为真,结果为真,否则为假。
  -o 逻辑或,操作符两边一边为真,结果为真,否则为假。
  ! 逻辑非,条件为假,结果为真。
  例:
  [test@test ~]$ ll test.txt
  -rw-rw-r-- 1 test test 3 2008-08-22 16:30 test.txt
  [test@test ~]$ [ -f test.txt -a -s test.txt ]
  [test@test ~]$ echo $?
  0
  test.txt是一个普通文件,并且内容不为空,测试成功
  [test@test ~]$ [ -f test.txt -a -x test.txt ]
  [test@test ~]$ echo $?
  1
  test.txt不可执行,所以为假
  3. 字符串测试
  字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。
  字符串测试有5种格式
  test "string"
  test string_operator "string"
  test "string" string_operator "string"
  [ string_operator string ]
  [ string string_operator string ]
  这里,string_operator可为:
  = 两个字符串相等。
  != 两个字符串不等。
  -z 空串。
  -n 非空串。
  要测试环境变量EDITOR是否为空:
  $ [ -z $EDITOR ]
  $ echo $?
  1
  非空,取值是否是vi?
  $ [ $EDITOR = "vi" ]
  $ echo $?
  1
  用echo命令反馈其值:
  $ echo $EDITOR
  vi
  测试变量var1与变量var2是否相等:
  $ [ "$var1" = "$var2" ]
  没有规定在设置变量时一定要用双引号,但在进行字符串比较时必须这样做,否则可能会出错,比如
  var1=""
  var="test"
  此时,[ $var1 = $var2 ]语句会解析成:
  [ = test ] 因此会出现语法错误,输出错误提示:
  bash: [: =: unary operator expected
  4. 测试数值
  测试数值可以使用许多操作符,一般格式如下:
  "number" numeric_operator "number"
  或者
  [ "number" numeric_operator" number" ]
  numeric_operator可为:
  -eq 数值相等。
  -ne 数值不相等。
  -gt 第一个数大于第二个数。
  -lt 第一个数小于第二个数。
  -le 第一个数小于等于第二个数。
  -ge 第一个数大于等于第二个数。
  例:
  $ value=15
  $ [ $value -eq 15 ]
  $ echo $?
  0
  $ [ $value -eq 16 ]
  $ echo $?
  1
  5. 数值测试
  可以用expr测试一个数,expr命令一般用于整数值,但也可用于字符串。一般格式为:
  expr argument operator argument
  例如:
  要测试一个变量是否是一个整数值,可以这样测试:
  $ val=15
  $ expr $val + 1 > /dev/null 2>&1
  $ echo $?
  0
  如果返回值为0,证明这是一个数,其他则表明为非数值。
  $ val=test
  $ expr $val + 1 > /dev/null 2>&1
  $ echo $?
  2
  这是一个非数值变量。
  expr也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成功返回1,任何其他值为无效或错误。下面的例子测试两个字符串是否相等,这里字符串为
  “hello”和“hello”。
  $ val=hello
  $ expr $val = "hello"
  1
  $ echo $?
  0
  expr返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表示测试成功,“hello”确实等于“hello”。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-555852-1-1.html 上篇帖子: shell传入参数的处理 下篇帖子: shell 文本过滤
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表