Shell Script 基本写法
抽了点时间把shell script 复习了一下,现在把它总结一下写成博客。
一、Shell 的分类及 Shell Script
Shell的用途就不用说了,用过Linux的肯定知道。但是shell的种类是极其丰富的,有ksh
,csh
,zch
等等,Linux 系统一般默认的是bash这个 shell。也有一些 shell 专门用来阻止用户登陆系统进行操作,比如:/user/sbin/nologin 这个 shell。
Shell Script 也很容易理解,这个就是依托于Shell程序,靠Shell来解释执行的脚本。
二、Shell Script的三种执行方式
当我们需要执行一个Shell脚本时,有三种方式可供选择:
- 1、./xxx.sh
- 2、sh xxx.sh
- 3、source xxx.sh
这三种方式是有很大区别的。第一种方式必须保证当前用户对当前脚本有可读和可执行权限,而且在Shell中执行它时是另开启一个进程执行,也就是说在脚本中完成的环境设置不会影响到当前Shell!
第二种方式只需要脚本有 r 权限就好了,但是执行的方式和第一种相同,也是另开启一个进程执行。
第三种方式需要 r 权限,脚本的执行是在当前Shell完成的,变量等环境设置可以影响当前Shell。
Shell Script的特殊变量: $#
、$?
、$1
Shell中的普通变量我们肯定是很熟悉的,只需要注意一点即可:变量赋值的时候等号两边不能有空格,否则Shell会把变量作为命令处理。 在使用Shell的时候,它的几个特殊变量我们必然会经常使用,其中:
$?
这个表示在当前Shell进程中执行的上一个命令的返回值,我们可以用它来判断上一个命令执行是否出错。
$#
表示的是执行参数的个数,比如执行脚本 ./script.sh first second ,那么$#
的值为2,这个和普通可执行程序类似。
$1
,$2
,...
这个代表具体的参数,比如执行 ./script.sh first second,那么$1
就为 first,$2
就为 second。
Shell Script 的语法
判断
if [ ] ; then ... fi
if [ ] ; then ... elif [ ] ; then ... else fi
Shell Script 中的程序块一般都是反写做为结束,判断语句是if 后面接中括号判断,同时注意中括号两端必须有空格,里边条件运算符两端也必须有空格! 如下代码所示:
if [ "$1" == "n" ] ; then
echo -e "you choose no!"
elif [ "$1" == "y" ] ; then
echo -e "you choose yes!"
else
echo -e "error char!"
fi
分支语句
case ... in
使用方式如下所示:
case $1 in
"yes")
echo -e "case yes!"
;;
"no")
echo -e "case no!"
;;
"*")
echo -e "case other!"
;;
esac
循环语句
until [] do ... done
until [ "$1" == "yes" ]
do
echo "print some string"
done
while[] do ... done
while [ "$1" == "yes" ]
do
echo "print some string"
done
for var in ... do ... done
for $1 in "yes" "ok" "right"
do
echo -e "you choose right!"
done
for ((... ; ... ; ...)) do ... done
for(( i=1; i<10; i=i+1))
do
echo -e "the num is $i"
done
Script 中的函数
函数的写法如下所示:
function puts(){
echo -e "the function is puts!"
echo -e "haha"
}
函数声明必须写在脚本的顶部,函数可以有参数但是不用在括号中声明出来,使用时直接 函数名
+空格
+参数
就好了。如下所示:
function putsName(){
echo -e "the number of args is $#"
echo -e "the name is $1"
}
echo -e "The script begin!"
read -p "please set your name" NAME
putsName $NAME
函数获取参数的方式和脚本获取参数的方式相同,也是用$#
, $1
, $2
等,在函数体内这几个特殊变量表示的是函数的参数!
OK!基本就这些了!