涉及到比较和判断的时候,要注意

整数比较使用-lt,-gt,ge等比较运算符,详情参考:整数比较

文件测试使用 -d, -f, -x等运算发,详情参考:文件测试

逻辑判断使用    &&(且)、||(或)、!(取反)

字符串比较实用

字符串的比较使用以下三个比较运算符:= 或者(==)、!= 、> 、

-n表示判断后面的值是否为空,不为空则返回true,为空则返回false。

下面的一个例子:

#!/bin/bash

#文件名:test.sh

read -p 'please input name:' name

read -p 'please input password:' pwd

if [ -z $name ] || [ -z $pwd ]

then

echo "hacker"

else

if [ $name == 'root' ] && [ $pwd == 'admin' ]

then

echo "welcome"

else

echo "hacker"

fi

fi

运行测试:

ubuntu@ubuntu:~$ ./test.sh

please input name:root

please input password:admin

welcome

ubuntu@ubuntu:~$ ./test.sh

please input name:root

please input password:

hacker

ubuntu@ubuntu:~$ ./test.sh

please input name:root

please input password:beyond

hacker

ubuntu@ubuntu:~$

注意:

比较运算符的两边都有空格分隔,同时要注意比较运算符两边的变量是否可能为空,比如下面这个例子:

#!/bin/bash

#文件名:test.sh

if [ $1 == 'hello' ];then

echo "yes"

elif [ $1 == 'no' ];then

echo "no"

fi

运行:

ubuntu@ubuntu:~$ ./test.sh

./test.sh: line 4: [: ==: unary operator expected

./test.sh: line 7: [: ==: unary operator expected

ubuntu@ubuntu:~$ ./test.sh hello

yes

ubuntu@ubuntu:~$ ./test.sh no

no

ubuntu@ubuntu:~$ ./test.sh test

ubuntu@ubuntu:~$

可以看到,在代码中想要判断shell命令的第二个参数是否为hello或者no,但是在测试的时候,如果没有第二个参数,那么就变成了 if [ == 'hello' ],这个命令肯定是错误的了,所以会报错,比较好的做法是在判断之前加一个判断变量是否为空  或者使用双引号将其括起来,注意,必须使用双引号,因为变量在双引号中才会被解析。

#!/bin/bash

#文件名:test.sh

if [ "$1" == 'yes' ]; then

echo "yes"

elif [ "$1" == 'no' ]; then

echo "no"

else

echo "nothing"

fi

运行:

ubuntu@ubuntu:~$ ./test.sh

nothing

ubuntu@ubuntu:~$ ./test.sh yes

yes

ubuntu@ubuntu:~$ ./test.sh no

no

ubuntu@ubuntu:~$ ./test.sh demo

nothing

这样的话,就不会报错了。

shell 脚本比较字符串相等_shell脚本--逻辑判断与字符串比较相关推荐

  1. shell不允许输入空字符_shell脚本编程之控制脚本

    点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 欢迎关注我,一起学习,一起进步! 1.引言 目前为止,运行脚本的唯一方式是以实时模式在命 ...

  2. shell两个时间字符串插值_Shell 脚本速成

    0x00 前言 这段时间快速把 Micropoor 的内网课程看完了一遍,里面出现了很多 Shell 脚本. Shell 脚本有什么好处? 无需安装其他软件 适合任务自动化,擅长系统管理任务 通过 S ...

  3. shell脚本删除冒号空格_shell脚本如何删除指定字符串,文档如下:

    展开全部 用正则匹配e68a8462616964757a686964616f31333361313338就可以了. shell脚本regex正则表达式 和 字符串替换 任意字符 ^行首匹配 $行尾匹配 ...

  4. shell去掉字符两端字符_Shell脚本8种字符串截取方法总结

    摘自: http://www.jb51.net/article/56563.htm Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.ht ...

  5. shell如何解决mysql交互式_shell脚本与mysql交互方法汇总

    有大侠知道其他方法的,还请不吝赐教,在此谢过:) shell脚本导入数据文件到mysql内 当然是利用mysqlimport啦 示例脚本: #!/bin/sh # import test_table. ...

  6. shell 判断网线插拔_shell脚本自动检测网络掉线和自动重连

    在ppp移植成功后,有时会出现ppp掉线等情况.这篇文章写了一个自动检测连接网络的解决方法. 创建一个shell脚本,在里面添加一下内容.(记得给操作权限) #!/bin/sh //根据你自己的she ...

  7. shell 删除七日内日志_SHELL脚本定期删除日志文件(日志定期清理)

    假设我们的应用每天会产生一个日志文件,但我们并没有对日志文件做任何归档处理,久而久之日积月累,就会将磁盘空间占满,从而影响系统的正常运行. 分析磁盘空间占用情况 #当前磁盘空间占用情况 df -h # ...

  8. shell 删除七日内日志_SHELL脚本:定期清理日志文件

    1.脚本实现的功能 定期清理指定的日志目录或者文件 2.脚本使用说明 #./log_clean.sh 日志目录/文件 保留天数 脚本会对大于保留天数的的日志目录或者文件进行删除或者重定向清理,因为这个 ...

  9. sftp shell 批量上传文件_shell脚本进行sftp、ftp文件批量上传与下载

    SFTP传送:若使用SecureCRT,按下ALT+P开启新的会话即进行sftp操作 输入help命令,显示该SFTP提供所有的命令cd 路径 更改远程目录到"路径" lcd 路径 ...

最新文章

  1. 服务器500_BTA齐聚新基建——2030年百度智能云服务器数量超500万台
  2. mysql 3/17/2016
  3. Docker、Kubernetes、Apache Mesos 之争 | 一个与传说不同的故事
  4. 动态配置流处理-BetterCloud如何使用Flink构建报警系统
  5. 【Spring MVC 中 HandlerInterceptorAdapter的使用】
  6. HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)
  7. C# 系统环境变量读取
  8. 利用spring注解创建bean
  9. 十四、w、vmstat、top、sar命令
  10. n步自举法:时序差分方法与蒙特卡洛方法的结合
  11. 魔改部署自己专属的合成大西瓜(一:运行篇)
  12. ubuntu安装时出现11:资源暂时不可用
  13. 如何自定义cad线型_百度经验.html,如何找到自己需要的CAD线型?教你怎样自定义CAD线型...
  14. prewitt算子实现
  15. 2021考研英语大作文笔记(刘晓燕版)
  16. 知识图谱嵌入(KGE):方法和应用的综述
  17. Shiny server: application failed to start
  18. 机器学习系列-- 异常检测(Anomaly Detection)
  19. 激活windows系列地址
  20. 求两个数的 最大公约数 和最小公倍数

热门文章

  1. oracle 对应的JDBC驱动 版本
  2. 偶也要去上海Tech一把了
  3. Python基础第一天
  4. 关于Unity中的Mesh Collider碰撞器
  5. BZOJ1299 [LLH邀请赛]巧克力棒
  6. 很不错的Windows 控件 Developer Express Inc.NET
  7. 笔试面试收获(持续更新中)
  8. dealloc不调用的情况
  9. docker-ce安装
  10. 我在全球最大的同性社交平台那点事