红联Linux门户
Linux帮助

shell,shell script简单总结

发布时间:2016-03-12 22:53:48来源:linux网站作者:老廖

抽了点时间把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!基本就这些了!


本文永久更新地址:http://www.linuxdiyf.com/linux/18878.html