shell脚本中的基本语法包括判断,条件,循环,函数,位置参数和特殊变量等等,下面我们就一一介绍吧
1.判断:test 语句 和 [
test语句和[ 都可以用于判断一条语句的真假,不过shell和c语言有区别,一定要切记在shell中:真返回0,假返回1
举个例子吧:
#!/bin/bash val=10 test $val -gt 9 echo $? test $val -gt 10 echo $? [ $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 $?
#!/bin/bash if [ -d script.sh ];then echo "is dir" elif [ -f script.sh ] then echo "is file" fi if : ;then echo "/ is always true" fi echo "please input your id:" read id echo "please input your password" read password if [ ${id} -eq 1 ];then if [ ${password} -eq 2 ];then echo "you are right" else echo "error" fi else echo "try again" fi
then后面有换行,但这条命令没写完,Shell会自动续行,把下一行接在then后面当作一条命令处理。和[命令一样,
要注意命令和各参数之间必须用空格隔开。:是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。
case/esac语句,和C语言的switch语句类似,其语法如下:
#!/bin/bash read val case $val in a) echo "it is a" ;; b) echo "it is b" ;; esac
3.循环语句
循环语句常见的有for,while等等
#!/bin/bash for i in {a..z} do echo "printf val is: $i" done for ((i=0;i<10;i++)) do echo "print val is:$i" done
4.位置参数和特殊变量:
#!/bin/bash echo "$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/bash fun() { 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 -x fun() { bash $1 echo "$2" echo "haha i'am called" } fun test.sh 100
好了,完了,如果大家有什么见解的话可以留言,但是我这里将到的还只是shell语法的冰山一角,
希望学透的人可以多搜集资料或者阅读相应书籍来达到目标,最后,祝大家编程快乐。