linux中shell脚本语法,【SHELL】 Linux SHELL 脚本语法及使用参考

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值