近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将一些要点总结如下,以供以后翻看或者供入门人员参考。
- 第一行
这里指的是脚本第一行,一般脚本第一行都是
#!/usr/bin/env bash
这句话的意思是告诉操作系统用哪个命令来解析脚本,一般不用改变
- 脚本(函数)参数
运行xx.sh 1 2 3后
$*为"1 2 3"(一起被引号包住)
$@为"1" "2" "3"(分别被包住)
$#为3(参数数量)
注:如果以上字符出现在函数里就是函数的输入
- 控制语句
- if
“if” 表达式如果条件为真则执行then后面的部分:
if ….; then
….
elif ….; then
….
Else
….
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
[ -d "$f" ] 判断f这个变量的值是否是个文件夹
- for循环
for TIF in $(ls $LAYERS)
do
INPUT=file:$($LAYERS/$TIF)
echo $INPUT
done
ls $LAYERS表示列出文件夹下所有文件,所以这是个集合,for循环遍历集合里所有文件,TIF为循环变量
- 操作符
- &&
&&意思是如果左边成立执行右边相当于 与
如:dir=$(cd "$dir" && /bin/pwd);这句话的意思是如果cd dir变量的值没有错误即dir变量所代表的文件夹路径正确,则执行/bin/pwd,即输出全路径 [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors” [ ]里面表示一种判断
- 变量定义
LAYERNAME="SRTM"
无需申明但是=前后不能有空格,使用的时候$LAYERNAME 或者 ${LAYERNAME}
- 函数
- 定义函数
realpath ()函数中的echo表示返回值,如果有多个echo最终输出会拼接起来。函数中的$@等表示函数的参数
{
f=$@;
echo "$f"
if [ -d "$f" ]; then
base="";
dir="$f";
else
base="/$(basename "$f")";
dir=$(dirname "$f");
fi;
dir=$(cd "$dir" && /bin/pwd);
echo "$dir$base"
}
-
- 使用函数
只需使用 realpath $LAYERS即可,$LAYERS为变量,realpath后面可以跟任意数量的参数以空格隔开,这些参数可以被realpath中的$@全部接受。其实echo就是个函数
以上就是我所学到的shell脚本编写语法,不足之处还请大家补充。