抽了点时间把shell script 复习了一下,现在把它总结一下写成博客。

一、Shell 的分类及 Shell Script

  Shell的用途就不用说了,用过Linux的肯定知道。但是shell的种类是极其丰富的,有kshcshzch 等等,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!基本就这些了!