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 $?
2.条件:if/then/elif/else/fi语句,这是shell里面的if语句,废话不多说,请看代码:
#!/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
需要注意if语句的格式,如果两条命令写在同一行则需要用;号隔开,一行只写一条命令就不需要写;号了, 另外,
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
其中read命令的作用是等待用户输入一行字符串,将该字符串存到一个Shell变量中
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语法的冰山一角,
希望想深入研究的人可以多搜集资料或者阅读相应书籍来达到目标,最后,祝大家编程快乐。