由于习惯了linux下的shell编写,所以完全放弃了bat,win下也拥抱cygwin了。这里记录下自己认为值得注意的地方。
参考资料
linux shell 逻辑运算符、逻辑表达式详解
基本知识
最容易混淆的部分
名称 | 说明 |
---|
${varname} | 获取变量varname的值,替换形式为$varname |
$((...)) ,$[...] ,expr ... | 算数运算并返回结果,命令expr具有同样的效果 |
[...] ,((...)) ,test ... | 判断…代表的表达式是否正确,注意与上面命令的差别 |
`…`,$(...) | 执行…表示的命令,也称命令替换,返回…其代码执行后的标准输出的结果,常见用echo输出 |
shell变量类型
类型 | 说明 |
---|
局部变量 | 在脚本命令中定义,仅在当前shell中有效 |
环境变量 | 所有程序都可以访问,执行env可以查看 |
shell变量 | 由shell程序设置的特殊变量,用于保证shell的正常运行,一部分为环境变量,一部分为局部变量 |
常用shell变量
变量名 | 说明 |
---|
$0 | 当前脚本的文件名,类似vim环境中的%变量(%:r可以取除suffix以外的部分) |
$n | n为整形,表示传递给脚本或函数的第n个参数 |
$# | 传递给脚本或函数的位置参数个数 |
$* | 传递给脚本或函数的所有位置参数(作为单个字符串) |
$@ | 传递给脚本或函数的所有位置参数(每个都作为独立的字符串) |
$? | 上一个命令的退出状态,或函数的返回值.特别注意:最大255,超过则为0,最好不要用于获取函数返回值 |
$$ | 当前shell的进程id(PID) |
变量的操作
名称 | 说明 |
---|
env | 查看环境变量 |
set | 查看环境变量和局部变量 |
readonly | 将一个变量设置为只读,后续无法再对其进行修改和删除 |
unset | 删除一个变量 |
export | 将一个变量设定为环境变量 |
函数的定义及使用
模块化(调用其它shell文件)
#方式1
source ./test_lib.sh
#方式2
. ./test_lib.sh #注意第一个.,其作用于source相同
#然后就可以调用test_lib.sh中的函数了
定义函数
特别注意:
1、函数的return 是否返回值属于可选,且值的范围受到限制:只能整形,最大255(超过则等于0)
2、函数的return 的值一般用来表示状态,0=成功
function funcSum(){
[return $var]
}
funcSum(){
echo "${var}"
}
方式3
ret=0
funcSum(){
ret=$[1+2]
}
调用函数
#对应方式1
funcSum 1 2 3 #注意:调用函数和调用脚本的形式一样
ret=$? #这里一定要注意返回值的大小是否超过255
#对应方式2
ret=`funcSum 1 2 3`
#对应方式3
echo ${ret} #由于ret是全局是全局变量,可以直接使用
运算符
文件测试运算符
名称 | 说明 |
---|
-e | 判断【某个东东】是否存在 |
-f | 判断档案是否存在 |
-d | 判断目录是否存在 |
-r -w -x | 判断属性 |
-s | 判断是否为空档案 |
整形运算符
注意:名称一列的运算符只能用于整形
名称 | 别名 | 说明 |
---|
-eq | = | 相等,注意: 如果在[] 中,只能是字符串 |
-ne | != | 不相等,注意: 如果在[] 中,只能是字符串 |
-gt | > | 大于 |
-lt | < | 小于 |
-ge | >= | 大于等于 |
-le | <= | 小于等于 |
字符串运算符
名称 | 说明 |
---|
-z | 是否为空字符串 |
-n | 是否为非空字符串 |
= | 两字符串是否相等 |
!= | 两字符串是否不相等 |
布尔运算符
名称 | 说明 |
---|
-a | 表示 逻辑与(and) |
-o | 表示 逻辑或(or) |