您的位置:首页 > 运维架构 > Shell

【SHELL】 Linux SHELL 脚本语法及使用参考

2012-08-30 16:43 375 查看
Linux下的SHELL脚本常以 *.sh 为后缀,和Windows下的批处理脚本 *.bat *.cmd功能一致,但是功能和语法都要更强大。SHELL是一门脚本语言。本文介绍SHELL的语法及用法。

1. 开始使用

在Linux下新建一个文本文件,命名为test.sh,并输入以下内容:

#!/bin/sh
echo hello,world


【注】

- 第1行是必须的,用以表示本脚本由哪个程序来执行,此处是用 /bin/sh 程序执行

- 文本文件要使用unix/linux格式,即换行符为\n;与此对照的是,Windows下建立的文件文件是以 \r\n结尾。可以用三种方法确保这一点:

(1) 对于新手来说,可以在Linux下用vi或gedit来建立此文件,可以保证是unix格式

(2) 或者在windows下建立此文件,然后在linux使用dos2unix命令来改格式

(3) 在Windows下,用Notepad++软件进行编辑, 在菜单的"编辑 | 档案格式转换 | 转为unix格式"

2. 执行脚本

脚本在书写好了之后,有几种执行方法。

(1) sh test.sh

这里用/bin/sh这种程序来解释执行test.sh

(2) ./test.sh

这是把test.sh当作一个可执行文件来执行。要求:

- test.sh有可执行属性 chmod +x test.sh

- test.sh第一行是 #!/bin/sh

(3) . test.sh

点号也是可以执行脚本的。和前面的区别是,用点号执行时脚本的变量将自动输出到当前环境中。而用前面2种方法执行时,脚本中的变量不会注入到当前环境(除非显示地export)

举例来说,用点号执行以下脚本

#!/bin/sh
TEST_HOME=here
和用命令执行
#!/bin/sh
export TEST_HOME=here
效果是一样的。下面我们统一用(1)种办法来执行脚本,因此也要求显示地用export来输出变量。

3. 变量

SHELL里的变量都是字符串

(1) 变量定义

AUTHOR_NAME=shaofa

USER_COUNT=12

【注】

- 等号两边不可以用空

- 变量的值会被看作字符串,不会被看作数字 【这可能有点难以理解,通常用expr函数来得到一个数字】

- 语句无需以分号结尾

- 值不需要用引号括起来

(2) 变量使用

$AUTHOR_NAME



${AUTHOR_NAME}

用$表示取变量的值

(3) 变量导出

export AUTHOR_NAME=shaofa



AUTHOR_NAME=shaofa

export AUTHOR_NAME

(4) 取消变量

unset AUTHOR_NAME

可以从当前环境变量里取消一个变量

4. 函数

SHELL中也是支持函数的定义的。例如:

#!/bin/sh

function my_test()
{
_ARG1=$1;
_ARG2=$2;
echo "Got Argument: ${_ARG1}, ${_ARG2}"
return 0;
}

my_test  aaa  bbb


注:

- 函数的参数不会显式的列在括号里,但可以在代码里用 $1, $2 ... 引用

- 参数的个数貌似是有限制的,应该是从1到9

- 函数调用时,把参数列在后面,以空格分开,末尾不用加分号

- 函数可以return一个整数,作为返回码。也可以直接return退出函数

5. 条件测试

在if ... else, while等控制语句,必须有条件测试。

#!/bin/sh

if [ -f a.txt ]; then
echo "File Exist."
else
echo "File Not Exist."
fi


注意方括号内[ ],这里就是测试条件。其中 -f a.txt表示判断a.txt是否存在。【注】方括号内左右都要有空格,不能把各部分连在一起写

文件条件测试

-d 是否为目录

-f 是否为文件

-L 是否为链接

-r 是否可读

-w 是否可写

-s 是否为空(长度为0)

-x 是否可执行

-u 是否有suid标志

字符串条件测试

= 字符串相同

!= 字符串不等

-z 字符串为空

-n 字符串非空

字符串测试时,要把变量放在引号里,下面是一个例子

NAME=a
if [ -z "$NAME" ]; then
echo "String Is Null."
else
echo "String Is Not Null."
fi


数值测试

-eq 即=

-ne 即!=

-gt 即>

-lt 即<

-ge 即>=

-le 即<=

数值比较时,可以把变量放在引号,也可以不用引号

多个条件的与或关系

条件与: -a

条件或: -o

例:

[ -f 1.txt -a -f 2.txt ] 表示文件1.txt和2.txt同时存在为有效

6. 流程控制

(1) if ... else

if [ 条件 ]; then

....

fi



if [ 条件 ]; then

....

elif [ 条件 ] ; then

....

else

....

fi

(2)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: