旅行做攻略的网站好,做一年的网站能赚多少钱,开虚拟机很伤电脑吗,郑州网站建设服务目录
判断#xff1a;
shell条件测试
数值比较
文件测试
字符串比较
and和or
流程控制if#xff1a;
单分支结构#xff1a;
双分支结构
多分支结构
嵌套结构
调试脚本
注意#xff1a; 测试语法#xff1a;
模式匹配#xff1a;case 判断#xff1a;
…目录
判断
shell条件测试
数值比较
文件测试
字符串比较
and和or
流程控制if
单分支结构
双分支结构
多分支结构
嵌套结构
调试脚本
注意 测试语法
模式匹配case 判断
任何编程语言离不开判断(流控)
shell条件测试 数值比较
[ -gt ] 大于
[ -lt ] 小于
[ -eq ] 等于
[ -ne ] 不等于
[ -ge ] 大于等于
[ -le ] 小于等于
文件测试
-f filename 当filename存在时返回真
-b filename 当filename存在并且是块文件时返回真
-d pathname 当pathname存在并且是一个目录时返回真
-h filename 当filename存在并且是符号链接文件时返回真
-c filename 当filename存在并且是字符文件时返回真
-e pathname 当由pathname指定的文件或目录存在时返回真
-g pathname 当由pathname指定的文件或目录存在并且设置了SGID位时返回真 (SGID一种特殊的权限)
-k pathname 当由pathname指定的文件或目录存在并且设置了粘滞位时返回真
-p filename 当filename存在并且是命名管道时返回真
-r pathname 当由pathname指定的文件或目录存在并且可读时返回真
-s filename 当filename存在并且文件大小大于0时返回真
-S filename 当filename存在并且是socket时返回真
-t fd 当fd是与终端设备相关联的文件描述符时返回真
-w pathname 当由pathname指定的文件或目录存在并且可写时返回真
-x pathname 当由pathname指定的文件或目录存在并且可执行时时返回真
-O pathname 当由pathname存在并且被当前进程的有效用户id的用户拥有时返回真
-G pathname 当由pathname存在并且属于当前进程的有效用户id的用户的用户组时返回真 字符串比较
比较字符串的时候字符串建议加上双引号
等于
!不等于
-z:判断字符长度是为0
-n判断字符长度不是为0 and和or
当条件测试比较复杂时需要多个条件同时成立就需要混合条件测试
逻辑的(and)与(or)逻辑的and的意思-a两个条件同时完成时成立为真
||逻辑的or的意思-o两个条件一个成立为真表示方法
[ 条件一 -a 条件二 ]
[[ 条件二 条件一 ]]
[ 条件一] [条件二 ][ 条件一 -o 条件二 ]
[[ 条件二 || 条件一 ]]
[ 条件一] || [条件二 ]
流程控制if
单分支结构
if [ 条件 ] ; then符合该条件执行的语句
fi 双分支结构
表示方法一
if [ 条件 ] then符合该条件执行的语句else不符合该条件执行的语句fi表示方法二
if 命令then命令返回结果为真else命令返回结果为假
fi 多分支结构
if [ 条件1 ] then符合该条件执行的语句elif [ 条件2 ]then 符合该条件执行的语句elif [ 条件3 ]then 符合该条件执行的语句else不符合该条件执行的语句
fi
嵌套结构
if[条件测试1] then命令序列if[条件测试2]then命令序列else命令序列fi else命令序列
fi
调试脚本
sh -n 文件名 //仅调试脚本中的语法错误
sh -x 文件名 //逐句语句追踪
sh -v 文件名 //显示执行过程详细信息
sh -vx 文件名 //以调试的方式执行查询整个执行过程第一行是计算机看到的第二行是计算机执行的第三行是计算机输出的
注意
1.[]表示条件测试这里的空格很重要
2.在shell中then和fi是分开的语句如果要放在一行需要分号隔开
3.注意if判断中对变量的处理需要加引号
4.判断不支持浮点值
5.如果单独使用或者系统会认为是重定向如果要使用要对这些符号转意
6.默认运行if语句中的命令所产生的错误信息会出现在脚本的输出结果中一般会使用/dev/null
7.使用-n或者-z来检查长度时候没有定义的变量也为0
8.空变量和没有初始化的变量会对shell脚本造成灾难性的影响再不确定变量内容时可以使用-n或者-z测试一下
9.$?变量包含了之前执行命令的退出状态最近完成的前台进程 测试语法
test 条件表达式
[ 条件表达式 ]
[[ 条件表达式 ]] 模式匹配case
shell编程中if和case都是用来做流控的
case格式
case 变量 in
模式1)命令序列1
;;模式2)命令序列2
;;模式3)命令序列3
;;*)无匹配命令序列后
;;
esac