shell脚本学习心得

时间:2021-02-01 16:22:46

近来主要捣鼓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 ()
{
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"
}
函数中的echo表示返回值,如果有多个echo最终输出会拼接起来。函数中的$@等表示函数的参数
    • 使用函数
只需使用 realpath $LAYERS即可,$LAYERS为变量,realpath后面可以跟任意数量的参数以空格隔开,这些参数可以被realpath中的$@全部接受。其实echo就是个函数
以上就是我所学到的shell脚本编写语法,不足之处还请大家补充。