当前位置: 首页 > news >正文

做母婴的网站百中搜优化

做母婴的网站,百中搜优化,天津市建设工程定额管理站网站,游戏推广员平台小阿轩yx-Shell编程之条件语句 条件测试操作 Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功 返回值 为 0 时:表示成功否则(非 0 值)表示失败或异常 测试工具 test 命令,对特定条件进行…

小阿轩yx-Shell编程之条件语句

条件测试操作

Shell 环境根据命令执行后的返回状态值($?)来判断是否执行成功

返回值

  • 为 0 时:表示成功
  • 否则(非 0 值)表示失败或异常

测试工具 test 命令,对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立)。

test 测试命令包括以下两种形式

# 至少应有一个空格
格式1:test  条件表达式
格式2:[  条件表达式  ]
  • test 条件表达式
  • [ 条件表达式 ]

(注:两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯)需要注意方括号“[”或“]”与条件表达式之间需要至少一个空格进行分隔

测试条件类别不同,条件表达式也不同

常用的条件操作包括

  • 文件测试
  • 整数值比较
  • 字符串比较
  • 以及针对多个条件的逻辑测试

文件测试

[  操作符  文件或目录  ]
[root@localhost ~]# [  -d /media/cdrom  ]
[root@localhost ~]# echo $?
0
# 返回0表示条件成立
[root@localhost ~]# [  -d /media/cdrom/Server  ]
[root@localhost ~]# echo $?
0
# 返回1表示条件成立
[root@localhost ~]# [  -d /media/cdrom/Server  ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d /media/cdrom ] && echo "YES"    # 无输出表示不存在
[root@localhost ~]# [ -d /media/cdrom ] && echo "YES"
YES

根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行

文件测试的常见操作选项

  • -d:测试是否为目录(Directory)
  • -e:测试目录或文件是否存在(Exist)
  • -f:测试是否为文件(File)
  • -r:测试当前用户是否有权限读取(Read)
  • -w:测试当前用户是否有权限写入(Write)
  • -x:测试是否设置有可执行(Excute)权限

整数值比较

[  整数1  操作符  整数2  ]
[root@localhost ~]# unum=`who | wc -l`
[root@localhost ~]# [ $unum -gt 5 ] && echo "Too many"
[root@localhost ~]# [ $unum -gt 0 ] && echo "Too many"
Too many\\ 可用内存空间
[root@localhost ~]# freecc=$(free -m | grep "Mem" | awk '{print $4+$6}')
\\ 小于某值后输出具体的值1269MB
[root@localhost ~]# [ $freecc -lt 2048 ] && echo ${freecc}MB

根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数

(注:整数值比较在 Shell 脚本编写中的应用较多)

  • -eq:第一个数等于(Equal)第二个数
  • -ne:第一个数不等于(Not Equal)第二个数
  • -gt:第一个数大于(Greater Than)第二个数
  • -lt:第一个数小于(Lesser Than)第二个数
  • -le:第一个数小于或等于(Lesser or Equal)第二个数
  • -ge:第一个数大于或等于(Greater or Equal)第二个数

注:[ 选项 ]:中括号前后要有空格

字符串比较

[  字符串1  =  字符串2 ]
[  字符串1  !=  字符串2 ]
[  -z  字符串 ]
\\ 当前的语言环境
[root@localhost ~]# echo $LANG
zh_CN.UTF-8
\\ 字符串比较测试  !=前后有空格
[root@localhost ~]# [ LANG != "en.US" ] && echo "not en.US"
not en.US[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"
覆盖
[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?no
[root@localhost ~]# [ $ACK = "no" ] && echo "不覆盖"
不覆盖

通常用在

  • 检查用户输入
  • 系统环境等是否满足条件

在交互式操作Shell 脚本中,也可用来判断用户输入的位置参数是否符合要求

常用操作选项

  • =:第一个字符串与第二个字符串相同
  • !=:第一个字符串与第二个字符串不相同,其中“!”符号表示取反
  • -z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串

逻辑测试

格式1:[  表达式1  ]  操作符  [  表达式2  ]  ... 
格式2:命令1  操作符  命令2  ... 
[root@localhost ~]# uname -r
2.6.32-431.el6.x86_64
[root@localhost ~]# Mnum=$(uname -r | awk -F. '{print $1}')
[root@localhost ~]# Snum=$(uname -r | awk -F. '{print $2}')
[root@localhost ~]# [ $Mnum -eq 2 ] && [ $Snum -gt 4 ] && echo "符合要求"
符合要求
  • 判断两个或多个条件之间的依赖关系
  • 使用时放在不同的测试语句或命令之间

常用的逻辑测试操作

  • &&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为 0(结果成立)。使用 test 命令测试时,“&&”可改为“-a”
  • ||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为 0(结果成立)。使用 test 命令测试时,“||”可改为“-o”
  • !:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)

(注:“&&”和“||”通常也用于间隔不同的命令操作,作用是相似的)

if 条件语句

使用专用的 if 条件语句好处

  • 可以更好地整理脚本结构
  • 使得层次分明
  • 清晰易懂

if 语句的结构

  • 是最为常用的一种流程控制方式
  • 根据特定的条件测试结果
  • 分别执行不同的操作(如果……那么……)。根据不同的复杂程度

三种基本类型

  • 单分支 if 语句:指的是不同测试结果所对应的执行语句(一条或多条)。对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不执行任何操作
  • 双分支 if 语句:要求针对“条件成立”“条件不成立”两种情况分别执行不同的操作
  • 多分支 if 语句:可以根据测试结果的成立、不成立分别执行操作,所以能够嵌套使用,进行多次判断

if 语句应用示例

  • 单分支 if 语句应用:只判断一个成立或者不成立的条件
  • 双分支 if 语句应用:只是在单分支的基础上针对“条件不成立”的情况执行另一种操作,而不是“坐视不管”地不执行任何操作
  • 多分支 if 语句应用:能够根据多个互斥的条件分别执行不同的操作,实际上等同于嵌套使用的 if 语句

单分支结构

\\ 编辑配置文件
[root@localhost ~]# vim chkmountdir.sh
\\ 判断挂载点目录,若不存在则自动创建
MOUNT_DIR="/media/cdrom/"
#!/bin/bash
if  条件测试操作then   命令序列
fi
if  已用磁盘空间>80%then   报警
fi
\\ 添加执行权限
[root@localhost ~]# chmod +x chkmountdir.sh
\\ 判断挂载点是否存在
[root@localhost ~]# ./chkmountdir.sh

双分支结构

if  条件测试操作then   命令序列1else   命令序列2
fi
if  80端口是否在监听then   网站服务已在运行else   启动httpd服务
fi
  • 判断目标主机是否存活,显示检测结果
[root@localhost ~]# vim pinghost.sh
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &>/dev/null
if [ $? -eq 0 ]thenecho "Host $1 is up." elseecho "Host $1 is down."
fi
\\ 添加执行权限
[root@localhost ~]# chmod +x pinghost.sh

多分支结构 

if  条件测试操作1then  命令序列1
elif  条件测试操作2 then  命令序列2
else命令序列3
fi
if  分数为85~100之间then   判为优秀
elif   分数为70~84之间then   判为合格
esle判为不合格
fi
  • 判断分数范围,分出优秀、合格、不合格三档
[root@localhost ~]# vim gradediv.sh
#!/bin/bash
read -p "请输入您的分数(0-100): " GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]thenecho "$GRADE 分,优秀!" 
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]thenecho "$GRADE 分,合格!" 
elseecho "$GRADE 分,不合格!"
fi
\\ 添加执行权限
[root@localhost ~]# chmod +x gradediv.sh

case 分支语句

优点

  • 使脚本程序结构更加清晰
  • 层次分明

case 语句的结构

适用于以下情况

  • 某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的 if 语句非常相似,只不过 if 语句需要判断多个不同的条件,而 case 语句只是判断一个变量的不同取值
  • 关键字 case 后面跟的是“变量值”,即“$变量名”

使用 case 分支语句值得注意的特点

  • case 行尾必须为单词“in”,每一模式必须以右括号“)”结束
  • 双分号“;;”表示命令序列的结束
  • 模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号
  • “|”表示或,如“A|B”
  • 最后的“*)”表示默认模式,其中的*相当于通配符

case 语句应用示例

case  变量值  in
模式1)命令序列1;;
模式2)命令序列2;;……
* )默认命令序列
esac
case 分数 in
85~100)判为优秀;;
70~84)判为合格;;......
*)判为不合格
esac
[root@localhost ~]# vim hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in[a-z]|[A-Z])echo "您输入的是 字母.";;[0-9])echo "您输入的是 数字.";;*)echo "您输入的是 空格、功能键或者其他控制字符."
esac

 添加权限

[root@localhost ~]# chmod a+x hitkey.sh

测试并确认结果 

[root@localhost ~]#./hitkey.sh
请输入一个字符,并按Enter键:k
您输入的是 字母 k.
......

检查用户输入的字符类型

  • 提示用户从键盘输入一个字符
  • 通过 case 语句判断该字符是否为字母、数字或者其他控制字符
  • 给出相应的提示信息

 编写系统服务脚本

[root@localhost ~]# vim myprog
#!/bin/bash
case "$1" in
start)echo -n "正在启动 sleep 服务 ... "
if sleep 7200 &\\ 在后台启动 sleep 进程thenecho "OK"
fi
;;stop)echo -n "正在停止 sleep 服务 ... "pkill "sleep" &> /dev/null// 停止 sleep 进程echo "OK" 
;;status)
if pgrep "sleep" &>/dev/null ;
//判断并提示 sleep 进程状态then echo "sleep 服务已经启动." elseecho "sleep 服务已经停止."
fi
;;restart)
\\ 先停止
$0 stop
\\ 再启动服务
$0 start
\\ 默认显示用法信息
;; *)echo "用法: $0 {start|stop|status|restart}"
esac

添加权限 

[root@localhost ~]# chmod +x myprog
[root@localhost ~]# ./myprog start
正在启动 sleep 服务 ... OK
[root@localhost ~]# ./myprog status
sleep 服务已经启动.
[root@localhost ~]# ./myprog stop
正在停止 sleep 服务 ... OK
//未提供此参数,按默认处理
[root@localhost ~]# ./myprog reload
用法: ./myprog {start|stop|status|restart}
[root@localhost ~]# cp myprog /etc/init.d/
[root@localhost ~]# chkconfig --add myprog
[root@localhost ~]# chkconfig --list myprog
[root@localhost ~]# service myprog start

 

  • # chkconfig: 35 80 20:运行级别
  • # chkconfig: - 80 20:数字越大,优先启动
小阿轩yx-Shell编程之条件语句 
http://www.15wanjia.com/news/20359.html

相关文章:

  • 常州网站建设智博百度指数搜索热度
  • .net简单网站开发视频教程百度seo推广怎么收费
  • 微信小程序开发文档 菜鸟教程洛阳网站seo
  • 网站建设与网页设计案例教程小广告多的网站
  • 做网站 然后百度推广厦门关键词seo排名网站
  • 企业网站cms 系统网络营销的职能是什么
  • 泰安网站建设方案书seo排名方案
  • 模板网站建设哪家好0元免费做代理
  • 湖北省建设厅网站首页网上seo研究
  • 无锡宏腾网站建设百度seo推广优化
  • 煎蛋wordpress模板信息流广告优化
  • 免费软件app网站下载大全seo顾问服务 品达优化
  • 互联网金融网站开发百度关键词排名工具
  • 高清摄影作品网站营销方法有哪些方式
  • 设计网站公司咨询亿企邦百度竞价价格查询
  • 网站开发都有哪些语言百度推广投诉电话
  • 视频发布播放网站建设西安最新消息今天
  • 国外炫酷网站软文营销的定义
  • 东湖网站建设国际新闻 军事
  • 如何做酒店网站设计推广引流话术
  • 深圳市住房和建设局官网首页关键词排名优化
  • 做企业网站选百度云还是阿里云线上教育培训机构十大排名
  • 扬州网站建设培训免费下载百度seo
  • 做俄语网站windows优化大师是系统软件吗
  • 企业邮箱登录方法seo咨询服务
  • 深圳网站建设公司市场咨询公司
  • 云网站 深圳百度官方网页
  • 网页设计一级页面吉安seo招聘
  • 济南移动网站制作谷歌网页版登录入口
  • 重庆专业网站推广报价百度账号人工客服