【学习】Linux Shell脚本编程
1.脚本的组成和执行
Linux shell脚本的结构并不复杂,其主要由变量、内部命令以及shell的语法结构和一些函数、其他命令行的程序等组成,以下是一个简单的shell脚本。
#!/bin/bash
#This is a first script
echo
echo 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 root root Apr /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 -x
echo -n "are you a student?"
read answer
if [ $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.sh
are 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)数值测试
对数值进行测试,其主要是对两个数值进行比较,比较的结果包括两个数值相等、不相等以及大于和小于等,表中列出了常用的数值关系运算符。
下面演示如何使用这些关系运算符进行数值的测试。其实,进行数值比较的测试非常简单。首先使用编辑器vi创建名为test1.sh的文件,然后写入需要测试的数值,保存之后退出。
#!ban/bash
#
[ -eq ] # 判断36是否等于36
echo $?
echo # 使用echo命令输出一个空格
[ -eq ] # 判断36是否等于35
echo $?
echo
[ -gt ] # 判断36是否大于30
echo $?
以上的每条判断语句都可以单独来写,这里为了方便而将它们写在一起进行测试。完成以上的操作之后,接着开始执行脚本文件。注意,输出0表示正确,也就是说,条件成立,而1则相反,执行文件及测试结果如下所示。
[scat@Scat ~]$ bash test1.sh
# 第一个输出为0,说明条件成立
# 第二个输出为1,说明条件不成立
# 输出0,说明条件成立
(2)字符串测试
对于字符串的测试,可以对单个字符串进行,也可以对多个字符串进行。可通过对两个字符串的值进行比较来测试字符串是否相等。表15-2列出了进行字符串测试时常用的关系运算符。

接着演示如何使用这些关系运算符进行字符串的测试。其实,进行字符串比较的测试非常简单。首先创建名为test2.sh的脚本文件,其内容如下。
#!/bin/bash
[ "ccc" = "ccb" ]# 使用"="来判断这两个字符串是否相等,不用双引号也行
echo $?
echo
[ "ccc" != "ccb" ] # 判断字符串是否不相等
echo $?
echo
test2="abc"# 定义test2 的值为abc
[-z $test2 ]# 判断test2 是否为空
echo $?
exit
完成以上的写入并进行保存之后,接着开始执行脚本文件。执行文件及测试结果如下所示。
# 输出1,表示第一个测试结果的成立
# 输出0,表示测试结果成立
(3)逻辑操作符
在完成以上脚本文件的创建之后,到目前为止已经存在4个脚本文件。在这4个脚本文件中,只有一个文件拥有可执行权,下面使用ll命令列出这些脚本文件。
[scat@Scat ~]$ ll
total
-rwxrw-r-- scat scat Nov : helloscript.sh
-rw-rw-r-- scat scat Nov : test1.sh
-rw-rw-r-- scat scat Nov : test2.sh
-rw-rw-r-- scat scat Nov : test.sh
对于这些文件,若需要对其类型、权限以及长度等进行检测时,可使用文件状态检测运算符(如表15-3所示)来测试,如下是一个简单的例子。
[-x helloscript.sh ] # 判断helloscript.sh是否有可执行权
echo $?
echo
[-x test1.sh # 判断test1.sh是否有可执行权
echo $?
完成之后,将内容进行保存并退出,之后执行test3.sh文件。
# 输出0,表示helloscript.sh文件拥有可执行权
# 输出1,表示test1.sh没有可执行权

本节的重点是针对多个条件进行测试。要对多个条件进行测试,需要使用一些逻辑操作符,通过逻辑操作符将这些需要进行测试的条件进行连接起来。
shell所提供的逻辑操作符有逻辑与、逻辑或和逻辑否这三种,以下是对各个逻辑运算符的简单介绍。
-a:逻辑与,仅当两边的条件都为真时,结果才为真,否则为假。
-o:逻辑或,只要其中一边的条件为真,结果就为真。
!:逻辑否,当条件为假时,结果为真。
接着演示如何使用这些逻辑关系运算符进行文件属性的测试。其实,进行文件属性的比较测试的操作与之前的操作差不多。首先使用编辑器创建名为 test4.sh 的文件,然后写入需要测试的字符串,之后保存所做修改并退出。
#!/bin/bash
#
[-x helloscript.sh-a-x test2.sh ]
echo $?
echo
[-x helloscript.sh-o-x test2.sh ]
echo $?
说明:
第03行,当两个文件都有可执行权时为真
第06行:当其中有一个文件有可执行权时为真
完成之后,将内容进行保存并退出,之后执行test4.sh文件。
[scat@Scat ~]$ bash test4.sh
# 第一个测试结果为假
# 第二个测试结果为真
【学习】Linux Shell脚本编程的更多相关文章
- Linux shell脚本编程(三)
Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...
- Linux shell脚本编程(二)
Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...
- Linux shell脚本编程(一)
Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...
- Linux Shell脚本编程--Linux特殊符号大全
Linux Shell脚本编程--Linux特殊符号大全 linux_shell 特殊符号的介绍 2011
- Linux Shell脚本编程while语句
Linux Shell脚本编程while语句案例 1,每隔3秒,打印一次系统负载 #!/bin/bash while truedo uptime sleep 3done 2,把监控结果保存 ...
- [linux] shell脚本编程-xunsearch安装脚本学习
安装脚本setup.sh #!/bin/sh # FULL fast install/upgrade script # See help message via `--help' # $Id$ # s ...
- Linux Shell脚本编程-基础1
概述: shell脚本在Linux系统管理员的运维工作中非常重要.shell脚本能够帮助我们很方便的管理服务器,因为我们可以指定一个任务计划,定时的去执行某一个脚本以满足我们的需求.本篇将从编程基础 ...
- Linux shell脚本编程基础之练习篇
shell脚本编程基础之练习篇. 1.编写一个脚本使我们在写一个脚本时自动生成”#!/bin/bash”这一行和注释信息. #!/bin/bash ] then echo "请输入一个参数& ...
- 学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
随机推荐
- 论Java访问权限控制的重要性
人在什么面前最容易失去抵抗力? 美色,算是一个,比如说西施的贡献薄就是忍辱负重.以身报国.助越灭吴:金钱,算是另外一个,我们古人常说“钱乃身外之物,生不带来死不带去”,但我们又都知道“有钱能使鬼推磨” ...
- 【3分钟就会系列】使用Ocelot+Consul搭建微服务吧!
一.什么Ocelot? API网关是一个服务器,是系统的唯一入口.API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端实现和微服务应用程 ...
- 基础才是重中之重~lock和monitor的区别
回到目录 Monitor的介绍 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中 ...
- ASP.NET Core中使用表达式树创建URL
当我们在ASP.NET Core中生成一个action的url会这样写: var url=_urlHelper.Action("Index", "Home"); ...
- 设计模式总结篇系列:桥接模式(Bridge)
在实际类设计过程中,有时会遇到此类情况:由于实际的需要,某个类具有两个或两个以上的维度变化,如果利用继承将每种可能的变化情况都定义成一个类,一是会导致类膨胀的问题,二是以后不太好维护和并且违背类的设计 ...
- Linux基础知识第三讲,拷贝文件跟移动文件命令
目录 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命令 1.tree命令常用选项 2.cp复制文件命令 3.mv 命令的使用 Linux基础知识第三讲,拷贝文件跟移动文件命令 一丶常用命 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- C#简单委托示例——让你一看就会的demo
委托 1. 什么是委托? 委托就是具有相同签名和返回值类型的有序方法列表 它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递 是一种引用类型 方法的列表称为调用列表 当委托被调用时,它调 ...
- .Net语言 APP开发平台——Smobiler学习日志:SmoOne新增考勤功能
大家好!SmoOne这次新增了考勤功能,大家打开SmoOne应用便可体验,无需重新下载更新.如果没有下载SmoOne客户端,可以在apps.smobiler.com进行下载安装. 另外,SmoOne开 ...
- Asp.NetCore程序发布到CentOs(含安装部署netcore)--最佳实践(一)
环境 本地 win7 服务器:Virtual Box 上的Centos ssh工具: Xshell 文件传输: xftp 1.在本地创建asp.net core应用发布 1.1 使用Vs2017 新建 ...
