shell脚本学习笔记(语法)

来源:互联网 发布:零基础学qt4编程pdf 编辑:程序博客网 时间:2024/06/07 20:54

     shell脚本中的基本语法包括判断,条件,循环,函数,位置参数和特殊变量等等,下面我们就一一介绍吧


1.判断:test 语句 和 [ 

test语句和[ 都可以用于判断一条语句的真假,不过shell和c语言有区别,一定要切记在shell中:真返回0,假返回1

举个例子吧:

#!/bin/bashval=10                                                                          test $val -gt 9echo $?test $val -gt 10echo $?[ $val -gt 9 ] echo $?[ $val -gt 10 ]echo $?

               

还有一些测试命令是比较常用的:

[ -d DIR ] : 如果DIR存在并且是一个目录则为真[ -f FILE ] : 如果FILE存在且是一个通文件则为真[ -z STRING ] : 如果STRING的长度为零则为真[ -n STRING ] : 如果STRING的长度非零则为真[ STRING1 = STRING2 ] : 如果两个字符串相同则为真[ STRING1 != STRING2 ] : 如果字符串不相同则为真
我测试代码如下:

#!/bin/bash[ -d script.sh ]  #是否是目录echo $?[ -f script.sh ]  #普通文件echo $?STRING="" [ -z STRING ]  #string的长度为0则真echo $?[ -n STRING ] #stirng长度非0则真echo $?STRING1="haha"STRING2="hehe"[ STRING1 = STRING2 ] #两字符串长度是否相等echo $?[ STRING1 != STRING2 ] #两字符串长度不等返回真echo $?[ ! -d script  ] #非echo $?[  -n STRING  -a  -z STRING  ] #与echo $? [  -n STRING  -o  -z STRING  ] #或echo $?


2.条件:if/then/elif/else/fi语句,这是shell里面的if语句,废话不多说,请看代码:

#!/bin/bashif [ -d script.sh ];then        echo "is dir"elif [ -f script.sh ]    then        echo "is file"fiif : ;then        echo "/ is always true"fiecho "please input your id:"read idecho "please input your password"read passwordif [ ${id} -eq 1 ];then        if [ ${password} -eq 2 ];then                echo "you are right"        else                 echo "error"        fi  else        echo "try again"fi

     需要注意if语句的格式,如果两条命令写在同一行则需要用;号隔开,一行只写一条命令就不需要写;号了,另外,

then后面有换行,但这条命令没写完,Shell会自动续行,把下一行接在then后面当作一条命令处理。和[命令一样,

要注意命令和各参数之间必须用空格隔开。:是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。

case/esac语句,和C语言的switch语句类似,其语法如下:

#!/bin/bashread val case $val in        a)          echo "it is a"        ;;          b)          echo "it is b"        ;;  esac

其中read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中


3.循环语句

循环语句常见的有for,while等等

#!/bin/bashfor i in {a..z}do        echo "printf val is: $i"donefor ((i=0;i<10;i++))do        echo "print val is:$i"done

4.位置参数和特殊变量:

echo $0       #可执行文件名 ,相当于C语言main函数的argv[0]  
echo $1 $2  #这些称为位置参数(Positional Parameter),相当于C语言main函数 的argv[1]、argv[2]...
echo $#    #相当于C语言main函数的argc - 1,注意这里的#后面不表示注释(不包扩可执行文件名)
echo $$    #当前shell的进程id
echo $!     #Shell最后运行的后台Process的PID
echo $@    #表示参数列表"$1" "$2" ...(不包括 $0 ),例如可以用在for循环中的in后面。
echo $?      #退出码,上一条命令的Exit Status
    位置参数可以用shift命令左移。比如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,
原来的$1、$2、$3丢弃,$0不移动。不带参数的shift命令相当于shift 1
#!/bin/bashecho "$0 is done"echo "$1 is done"bash $1 &echo "$#"echo "$@"echo "$$"echo "$!"echo "$?"for val in $@do        echo "$val"done


5.函数

shell中也有函数,和C语言中是有区别的:

        (1).函数定义中没有返回值也没有参数列表

        (2).注意函数体的左花括号{和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括
号}写在同一行,命令末尾必须有;号

        (3).Shell脚本中的变量不必先定义后使用但是函数必须先定义后调用

        (4).Shell函数中可以有参数,调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变

量来提取参数

#!/bin/bashfun(){         bash $1        echo "$2"        echo "haha i'am called"}fun test.sh 100 


以上是基本的语法了,最后我还要说的就是shell脚本的调试

   Shell提供了一些用于调试脚本的选项,如下所示:
         -n 读一遍脚本中的命令但不执行,用于检查脚本中的语法错误
         -v 和 -x  提供跟踪执行信息,将执行的每一条命令和结果依次打印出来

使用这些选项有三种方法,
一是在命令行提供参数
    $ sh -x ./script.sh
二是在脚本开头提供参数
    #! /bin/sh -x

第三种方法是在脚本中用set命令启用或禁用参数
     set -x和set +x分别表示启用和禁用-x参数,这样可以只对脚本中的某一段进行跟踪调试。

#!/bin/bash -xfun(){         bash $1        echo "$2"        echo "haha i'am called"}fun test.sh 100 


      好了,完了,如果大家有什么见解的话可以留言,但是我这里将到的还只是shell语法的冰山一角,

希望想深入研究的人可以多搜集资料或者阅读相应书籍来达到目标,最后,祝大家编程快乐。


1 0
原创粉丝点击