shell命令二
在Shell脚本中,变量本质上都是字符串类型
核心对比表
符号 | 功能类型 | 典型场景 | 关键特性 |
---|---|---|---|
``` | 命令替换 | 获取命令输出作为值 | 反引号已逐渐被 $() 取代 |
[] | 条件测试 | 文件检测、逻辑比较 | 必须保留空格,支持 [[ ]] 扩展 |
{} | 代码块/扩展 | 组合命令或生成序列 | 代码块在当前 Shell 执行,每个shell命令都以;结束 |
read键盘写入
作用:从键盘读取变量值
read -p "" i#-p 给出提示消息
export全局变量
作用:让变量可以在子进程中使用
export a=1
注意:
1.命令行设置全局变量
]# export a=1
在.sh文件中同样可以使用
2.在.sh文件中设置全局变量
export a=1
命令行无法调用
==原因:export定义的全局变量可以在子进程中使用,但是在子进程创建的全局变量无法在父进程使用==
数值运算
使用$(())或者$[]
]# echo $[i+1]
使用let
]# let i++
条件测试
0表示“真”(成功),非零值表示“假”(失败)
echo $? 显示上一条命令的退出状态码
1)判断变量是否为空 [ 操作符 字符串 ] -z 字符串的值为空 -n 字符串的值不为空(相当于! -z)
[root@nsd ~]# w=212
[root@nsd ~]# [ -z "$w" ]
[root@nsd ~]# echo $?
1
[root@nsd ~]# [ -z "$p" ]
[root@nsd ~]# echo $?
0
==判断是否为空的时候并不输出内容 echo $? 输出判断结果==
2)一行执行多条命令的情况 # A ; B#执行A命令后执行B命令,两者没有逻辑关系 # A && B #仅当A命令执行成功,才执行B命令,&&并且的意思,执行失败则不往下执行 # A || B #仅当A命令执行失败,才执行B命令,||或者的意思,A执行成功则不执行B,A执行失败,则执行B
判段变量是否为空,有输出
]# [ -z "$a" ] || echo "a变量不为空"
3)判断字符串是否相等 [ 字符串1 操作符 字符串2 ] == 两个字符串相同 等于号两边的数据没有空格 != 两个字符串不相同
一般和与或符号一同使用
#判断两个字符串是否是相同
[ "123" == "1234" ] && echo "相同" || echo "不相同"
4)整数大小比较
[ 字符串1 操作符 字符串2 ]
1)-gt 大于 2)-ge 大于或等于 3)-lt 小于 4)-le 小于或等于 5)-eq 相等
识别文件/目录的状态
[ -f "/etc/hosts" ]
1)-e 判断对象是否存在(不管是目录还是文件)
2)-d 判断对象是否为目录(存在且是目录)
3)-f 判断对象是否为文件(存在且是文件)
4)-r 判断对象是否可读
5)-w 判断对象是否可写
6)-x 判断对象是否具有x权限