为了账号安全,请及时绑定邮箱和手机立即绑定

【学习】Linux Shell脚本编程

标签:
Linux

1.脚本的组成和执行

Linux shell脚本的结构并不复杂,其主要由变量、内部命令以及shell的语法结构和一些函数、其他命令行的程序等组成,以下是一个简单的shell脚本。

#!/bin/bash
#This is a first scriptechoecho Hello Bash Script!echo

一般使用后缀名“.sh”来表示shell脚本,此脚本中的第一行使用“#!”开头,表明要用/bin/bash来解释和执行这个脚本文件,也可以使用/bin/sh来代替。实际上,/bin/sh是一个指向/bin/bash的软链接(soft link),也就是说,在执行/bin/sh 时,它调用的命令与/bin/bash 是相同的。可以使用如下的命令来查看/bin/bash文件。

autotest@xa-stf-u1804:~/Documents$ ll -la /bin/bash-rwxr-xr-x 1 root root 1113504 Apr  4  2018 /bin/bash*

接着是关于这个脚本的一些描述信息,这些描述信息包括编写脚本的时间、人物以及脚本的功能等信息,这也许是为了方便后来对脚本的维护。

之后是脚本所要实现的功能,这是脚本最为主要的部分,也是编写脚本的目的。当脚本编写完成之后保存脚本并退出,执行脚本可以事先使用chmod命令为该脚本文件添加可执行权,然后再执行,或者接着使用bash后接脚本文件名执行。

[scat@Scat ~]$ chmod u+x helloscript.sh    # 添加可执行权
[scat@Scat ~]$ ./helloscript.sh# 执行脚本文件
Hello Bash Script![scat@Scat ~]$ bash helloscript.sh# 使用bash 来执行
Hello Bash Shell Script!

在一个刚创建的脚本文件中,是没有可执行权限的。因此在执行它时会出现不允许执行的提示。而在添加可执行权限之后就可以执行。

2.脚本执行过程的追踪

对于一个刚完成编写的代码程序,无论技术有多么熟练都难免出现错误,所出现的这些错误包括语法错误和逻辑错误。若是遇到语法错误还好,要是逻辑错误那就麻烦了。这是因为有逻辑错误的程序可以正常运行,但所运行的结果并非想要的。

对于所编写的脚本,可以使用set命令进行运行时的跟踪。利用set命令有助于完成代码、发现代码中的错误以及修改和整理代码,使得所编写的代码更为完整。看如下一个名为test.sh的脚本。

复制代码

#!ban/bash
#
#set -xecho -n "are you a student?"read answerif [ $answer = Y ]then
    echo "yes,I am a student"else
    echo "No,I am a teacher"fi

复制代码

完成脚本的编写之后,将其保存并退出。接着进行授权,然后运行脚本文件。或者使用bash直接运行,操作如下。

复制代码

[scat@Scat ~]$ bash test.sh   # 执行脚本文件
are you a student?Y     # 输入Y确认,需要大写
yes,I am a student
[scat@Scat ~]$ bash test.share you a student?N     # 此次输入N
No,I am a teacher

复制代码

以上只是一些简单的输出,没有任何其他参数的输出。接着使用set命令来实现对脚本的跟踪。

首先开启set的功能,即将set命令前面的#号去掉,之后保存所做修改并退出,然后执行bash命令。

 

复制代码

[scat@Scat ~]$ bash test.sh   # 执行test.sh文件+echo-n 'are you a student?'are you a student?+read answer
Y          # 输入Y,要大写+'[' Y = Y ']'yes,I am a student
[scat@Scat ~]$ bash test.sh   # 再次执行脚本文件+echo-n 'are you a student?'are you a student?+read answer
N          # 此次输入N+'[' N = Y ']'+echo 'No,I am a teacher'No,I am a teacher

复制代码

 

在启动set命令功能之后,当执行脚本文件时出现了一些以“+”开头的行。也就是说,使用set命令可对脚本进行完全的跟踪。可以通过跟踪来发现理想的输出与实际输出的区别,然后进行修改,最终达到所需的要求。
3.脚本中的条件测试
下面介绍脚本中的条件测试。这方面的内容涉及数值的测试、字符串以及数字等内容。
(1)数值测试
对数值进行测试,其主要是对两个数值进行比较,比较的结果包括两个数值相等、不相等以及大于和小于等,表中列出了常用的数值关系运算符。
[object Object]

 

下面演示如何使用这些关系运算符进行数值的测试。其实,进行数值比较的测试非常简单。首先使用编辑器vi创建名为test1.sh的文件,然后写入需要测试的数值,保存之后退出。

复制代码

#!ban/bash
#
[ 36 -eq 36 ]     # 判断36是否等于36echo $?echo             # 使用echo命令输出一个空格[ 36 -eq 35 ]     # 判断36是否等于35echo $?echo[ 36 -gt 30 ]     # 判断36是否大于30echo $?

复制代码

以上的每条判断语句都可以单独来写,这里为了方便而将它们写在一起进行测试。完成以上的操作之后,接着开始执行脚本文件。注意,输出0表示正确,也就是说,条件成立,而1则相反,执行文件及测试结果如下所示。
[scat@Scat ~]$ bash test1.sh0      # 第一个输出为0,说明条件成立1      # 第二个输出为1,说明条件不成立0      # 输出0,说明条件成立

(2)字符串测试

对于字符串的测试,可以对单个字符串进行,也可以对多个字符串进行。可通过对两个字符串的值进行比较来测试字符串是否相等。表15-2列出了进行字符串测试时常用的关系运算符。

接着演示如何使用这些关系运算符进行字符串的测试。其实,进行字符串比较的测试非常简单。首先创建名为test2.sh的脚本文件,其内容如下。

复制代码

01 #!/bin/bash02 [ "ccc" = "ccb" ]# 使用"="来判断这两个字符串是否相等,不用双引号也行03 echo $?04 echo05 [ "ccc" != "ccb" ]   # 判断字符串是否不相等06 echo $?07 echo08 test2="abc"# 定义test2 的值为abc09 [-z $test2 ]# 判断test2 是否为空10 echo $?11 exit 0

复制代码

完成以上的写入并进行保存之后,接着开始执行脚本文件。执行文件及测试结果如下所示。

1   # 输出1,表示第一个测试结果的成立0   # 输出0,表示测试结果成立1

(3)逻辑操作符

在完成以上脚本文件的创建之后,到目前为止已经存在4个脚本文件。在这4个脚本文件中,只有一个文件拥有可执行权,下面使用ll命令列出这些脚本文件。

复制代码

[scat@Scat ~]$ ll
total 16-rwxrw-r-- 1 scat scat 76 Nov 6 14:05 helloscript.sh-rw-rw-r-- 1 scat scat 77 Nov 6 19:13 test1.sh-rw-rw-r-- 1 scat scat 91 Nov 6 19:23 test2.sh-rw-rw-r-- 1 scat scat 159 Nov 6 15:17 test.sh

复制代码

对于这些文件,若需要对其类型、权限以及长度等进行检测时,可使用文件状态检测运算符(如表15-3所示)来测试,如下是一个简单的例子。

01 [-x helloscript.sh ]  # 判断helloscript.sh是否有可执行权02 echo $?03 echo04 [-x test1.sh    # 判断test1.sh是否有可执行权05 echo $?

完成之后,将内容进行保存并退出,之后执行test3.sh文件。

0   # 输出0,表示helloscript.sh文件拥有可执行权1   # 输出1,表示test1.sh没有可执行权

本节的重点是针对多个条件进行测试。要对多个条件进行测试,需要使用一些逻辑操作符,通过逻辑操作符将这些需要进行测试的条件进行连接起来。

shell所提供的逻辑操作符有逻辑与、逻辑或和逻辑否这三种,以下是对各个逻辑运算符的简单介绍。

 -a:逻辑与,仅当两边的条件都为真时,结果才为真,否则为假。 

 -o:逻辑或,只要其中一边的条件为真,结果就为真。

 !:逻辑否,当条件为假时,结果为真。

接着演示如何使用这些逻辑关系运算符进行文件属性的测试。其实,进行文件属性的比较测试的操作与之前的操作差不多。首先使用编辑器创建名为 test4.sh 的文件,然后写入需要测试的字符串,之后保存所做修改并退出。

复制代码

01 #!/bin/bash02 #03 [-x helloscript.sh-a-x test2.sh ]04 echo $?05 echo06 [-x helloscript.sh-o-x test2.sh ]07 echo $?

复制代码

说明:

第03行,当两个文件都有可执行权时为真

第06行:当其中有一个文件有可执行权时为真

完成之后,将内容进行保存并退出,之后执行test4.sh文件。

[scat@Scat ~]$ bash test4.sh1  # 第一个测试结果为假0  # 第二个测试结果为真

1.脚本的组成和执行

Linux shell脚本的结构并不复杂,其主要由变量、内部命令以及shell的语法结构和一些函数、其他命令行的程序等组成,以下是一个简单的shell脚本。

#!/bin/bash
#This is a first scriptechoecho Hello Bash Script!echo

一般使用后缀名“.sh”来表示shell脚本,此脚本中的第一行使用“#!”开头,表明要用/bin/bash来解释和执行这个脚本文件,也可以使用/bin/sh来代替。实际上,/bin/sh是一个指向/bin/bash的软链接(soft link),也就是说,在执行/bin/sh 时,它调用的命令与/bin/bash 是相同的。可以使用如下的命令来查看/bin/bash文件。

autotest@xa-stf-u1804:~/Documents$ ll -la /bin/bash-rwxr-xr-x 1 root root 1113504 Apr  4  2018 /bin/bash*

接着是关于这个脚本的一些描述信息,这些描述信息包括编写脚本的时间、人物以及脚本的功能等信息,这也许是为了方便后来对脚本的维护。

之后是脚本所要实现的功能,这是脚本最为主要的部分,也是编写脚本的目的。当脚本编写完成之后保存脚本并退出,执行脚本可以事先使用chmod命令为该脚本文件添加可执行权,然后再执行,或者接着使用bash后接脚本文件名执行。

[scat@Scat ~]$ chmod u+x helloscript.sh    # 添加可执行权
[scat@Scat ~]$ ./helloscript.sh# 执行脚本文件
Hello Bash Script![scat@Scat ~]$ bash helloscript.sh# 使用bash 来执行
Hello Bash Shell Script!

在一个刚创建的脚本文件中,是没有可执行权限的。因此在执行它时会出现不允许执行的提示。而在添加可执行权限之后就可以执行。

2.脚本执行过程的追踪

对于一个刚完成编写的代码程序,无论技术有多么熟练都难免出现错误,所出现的这些错误包括语法错误和逻辑错误。若是遇到语法错误还好,要是逻辑错误那就麻烦了。这是因为有逻辑错误的程序可以正常运行,但所运行的结果并非想要的。

对于所编写的脚本,可以使用set命令进行运行时的跟踪。利用set命令有助于完成代码、发现代码中的错误以及修改和整理代码,使得所编写的代码更为完整。看如下一个名为test.sh的脚本。

复制代码

#!ban/bash
#
#set -xecho -n "are you a student?"read answerif [ $answer = Y ]then
    echo "yes,I am a student"else
    echo "No,I am a teacher"fi

复制代码

完成脚本的编写之后,将其保存并退出。接着进行授权,然后运行脚本文件。或者使用bash直接运行,操作如下。

复制代码

[scat@Scat ~]$ bash test.sh   # 执行脚本文件
are you a student?Y     # 输入Y确认,需要大写
yes,I am a student
[scat@Scat ~]$ bash test.share you a student?N     # 此次输入N
No,I am a teacher

复制代码

以上只是一些简单的输出,没有任何其他参数的输出。接着使用set命令来实现对脚本的跟踪。

首先开启set的功能,即将set命令前面的#号去掉,之后保存所做修改并退出,然后执行bash命令。

 

复制代码

[scat@Scat ~]$ bash test.sh   # 执行test.sh文件+echo-n 'are you a student?'are you a student?+read answer
Y          # 输入Y,要大写+'[' Y = Y ']'yes,I am a student
[scat@Scat ~]$ bash test.sh   # 再次执行脚本文件+echo-n 'are you a student?'are you a student?+read answer
N          # 此次输入N+'[' N = Y ']'+echo 'No,I am a teacher'No,I am a teacher

复制代码

 

在启动set命令功能之后,当执行脚本文件时出现了一些以“+”开头的行。也就是说,使用set命令可对脚本进行完全的跟踪。可以通过跟踪来发现理想的输出与实际输出的区别,然后进行修改,最终达到所需的要求。
3.脚本中的条件测试
下面介绍脚本中的条件测试。这方面的内容涉及数值的测试、字符串以及数字等内容。
(1)数值测试
对数值进行测试,其主要是对两个数值进行比较,比较的结果包括两个数值相等、不相等以及大于和小于等,表中列出了常用的数值关系运算符。
[object Object]

 

下面演示如何使用这些关系运算符进行数值的测试。其实,进行数值比较的测试非常简单。首先使用编辑器vi创建名为test1.sh的文件,然后写入需要测试的数值,保存之后退出。

复制代码

#!ban/bash
#
[ 36 -eq 36 ]     # 判断36是否等于36echo $?echo             # 使用echo命令输出一个空格[ 36 -eq 35 ]     # 判断36是否等于35echo $?echo[ 36 -gt 30 ]     # 判断36是否大于30echo $?

复制代码

以上的每条判断语句都可以单独来写,这里为了方便而将它们写在一起进行测试。完成以上的操作之后,接着开始执行脚本文件。注意,输出0表示正确,也就是说,条件成立,而1则相反,执行文件及测试结果如下所示。
[scat@Scat ~]$ bash test1.sh0      # 第一个输出为0,说明条件成立1      # 第二个输出为1,说明条件不成立0      # 输出0,说明条件成立

(2)字符串测试

对于字符串的测试,可以对单个字符串进行,也可以对多个字符串进行。可通过对两个字符串的值进行比较来测试字符串是否相等。表15-2列出了进行字符串测试时常用的关系运算符。

接着演示如何使用这些关系运算符进行字符串的测试。其实,进行字符串比较的测试非常简单。首先创建名为test2.sh的脚本文件,其内容如下。

复制代码

01 #!/bin/bash02 [ "ccc" = "ccb" ]# 使用"="来判断这两个字符串是否相等,不用双引号也行03 echo $?04 echo05 [ "ccc" != "ccb" ]   # 判断字符串是否不相等06 echo $?07 echo08 test2="abc"# 定义test2 的值为abc09 [-z $test2 ]# 判断test2 是否为空10 echo $?11 exit 0

复制代码

完成以上的写入并进行保存之后,接着开始执行脚本文件。执行文件及测试结果如下所示。

1   # 输出1,表示第一个测试结果的成立0   # 输出0,表示测试结果成立1

(3)逻辑操作符

在完成以上脚本文件的创建之后,到目前为止已经存在4个脚本文件。在这4个脚本文件中,只有一个文件拥有可执行权,下面使用ll命令列出这些脚本文件。

复制代码

[scat@Scat ~]$ ll
total 16-rwxrw-r-- 1 scat scat 76 Nov 6 14:05 helloscript.sh-rw-rw-r-- 1 scat scat 77 Nov 6 19:13 test1.sh-rw-rw-r-- 1 scat scat 91 Nov 6 19:23 test2.sh-rw-rw-r-- 1 scat scat 159 Nov 6 15:17 test.sh

复制代码

对于这些文件,若需要对其类型、权限以及长度等进行检测时,可使用文件状态检测运算符(如表15-3所示)来测试,如下是一个简单的例子。

01 [-x helloscript.sh ]  # 判断helloscript.sh是否有可执行权02 echo $?03 echo04 [-x test1.sh    # 判断test1.sh是否有可执行权05 echo $?

完成之后,将内容进行保存并退出,之后执行test3.sh文件。

0   # 输出0,表示helloscript.sh文件拥有可执行权1   # 输出1,表示test1.sh没有可执行权

本节的重点是针对多个条件进行测试。要对多个条件进行测试,需要使用一些逻辑操作符,通过逻辑操作符将这些需要进行测试的条件进行连接起来。

shell所提供的逻辑操作符有逻辑与、逻辑或和逻辑否这三种,以下是对各个逻辑运算符的简单介绍。

 -a:逻辑与,仅当两边的条件都为真时,结果才为真,否则为假。 

 -o:逻辑或,只要其中一边的条件为真,结果就为真。

 !:逻辑否,当条件为假时,结果为真。

接着演示如何使用这些逻辑关系运算符进行文件属性的测试。其实,进行文件属性的比较测试的操作与之前的操作差不多。首先使用编辑器创建名为 test4.sh 的文件,然后写入需要测试的字符串,之后保存所做修改并退出。

复制代码

01 #!/bin/bash02 #03 [-x helloscript.sh-a-x test2.sh ]04 echo $?05 echo06 [-x helloscript.sh-o-x test2.sh ]07 echo $?

复制代码

说明:

第03行,当两个文件都有可执行权时为真

第06行:当其中有一个文件有可执行权时为真

完成之后,将内容进行保存并退出,之后执行test4.sh文件。

[scat@Scat ~]$ bash test4.sh1  # 第一个测试结果为假0  # 第二个测试结果为真

原文出处:https://www.cnblogs.com/xixiuling/p/10330646.html 

作者:西秀岭 

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消