shell script

    shell script是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。

什么是shell script

编写

    shell script其实就是纯文本文件,我们可以编辑这个文件,然后让这个文件来帮我们一次执行多个命令,或者利用一些运算与逻辑判断来帮我们达成某些功能。在shell script的编写中还需要用到下面的注意事项:

  • 命令的执行时从上而下、从左而右的分析与执行;
  • 命令的执行中,命令、参数间的多个空白都会被忽略掉;
  • 空白行也将被忽略掉,并且[tab]按键所得的空白同样视为空格键;
  • 如果读取到一个Enter符号(CR),就尝试开始执行(或该串)命令;
  • 至于如果一行的内容太多,则可以使用“[Enter]”来扩展至下一行;
  • “#”可作为批注。任何加在#后面的数据将全部被视为批注文字而被忽略。

    通过一个例子来说明shell script中的内容。

#!/bin/bash
# Program:
#   This program shows “Hello World” in your screen.
# History:
# 2017/02/22 Avin First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo –e “Hello World! \a \n”
exit 0

    一般的shell script主要分为5段:

  • 第1行声明script使用的shell名称;
  • 第2~5行是程序内容的说明;
  • 第6~7行是主要环境变量的声明;
  • 第8行是主要的程序部分;
  • 第9行是告知执行结果。

执行

    shell script的执行可以通过直接命令执行和以bash进程来执行,也可以利用source来执行脚本。

判断式

test命令

    检测系统上面某些文件或者相关的属性时,利用test命令非常方便。test命令的参数及意义如下表所示:
图1
图2

判断符号[]

    除了使用test之外,还可以使用判断符号“[]”(中括号)来进行数据的判断。使用中括号需要注意,因为在中括号使用在很多地方,如果在bash的语法中使用中括号最为shell的判断式时,必须要注意中括号的两端需要有空格符来分隔。
    此外,使用中括号的其他注意事项:

  • 在中括号[]内的每个组件都需要有空格键来分隔;
  • 在中括号内的变量,最好都以双引号括起来;
  • 在中括号内的常量,最好都以单或双引号括起来。

默认变量

    script针对参数已经有设置好一些变量名称: 0 1,$2•••,除了这些数字变量外,还有一些较为特殊的变量可以在script内使用来调用这些参数。

  • $#:代表后接的参数“个数”;
  • @ 1”、” 2 3”、”$4”之意,每个变量是独立的;
  • 1c 2c 3c$4””,其中c为分隔字符,默认为空格键。

    在script中可以使用shift来造成参数变量号码偏移。

条件判断式

if…then

    if…then是最常见的条件判别式了,简单的说,就是当符合某个条件判断的时候,就进行某项工作。这个判别式的使用还分为多种情况。

  • 单层、简单条件判别式
if [ 条件判断式 ];then
  当条件判断式成立时,可以进行的命令工作内容
fi

    如果有多个条件进行判断时,可以使用多个中括号隔开,在括号和括号之间使用&&或||隔开,&&代表AND,||代表or。

  • 多重、复杂条件判断式
if [ 条件判断式 ];then
  当条件判断式成立时,可以进行的命令工作内容
else
  当条件判断式不成立时,可以进行的命令工作内容
fi
if [ 条件判断式一 ];then
  当条件判断式一成立时,可以进行的命令工作内容
elif [ 条件判断式二 ];then
  当条件判断式二成立时,可以进行的命令工作内容
else
  当条件判断式一与二均不成立时,可以进行的命令工作内容
fi

case…esac

    对于一个变量的多种可能值情况进行判别操作的时候,可以使用case…in…esac。

case $变量名称 in
  “第一个变量内容”)
  程序段
  ;;
  “第二个变量内容”)
  程序段
  ;;
  *)
  不包含第一个变量内容与第二个变量内容的其他程序执行段
  exit 1
  ;;
esac

function

    函数可以在shell script当中作出一个类似自定义执行命令的东西,可以简化很多的程序代码。因为shell script的执行方式是由上而下、由左而右,因此在shell script当中的function的设置一定要在程序的最前面。function也是拥有内置变量的,它的内置变量与shell script很类似,函数名称代表 0 1,$2…来替代的。

function fname() {
  程序段
}

循环(loop)

while do done, until do done

    不定循环最常见的就是这两种。

while [ condition ]
do
  程序段落
done
until [ condition ]
do
  程序段落
done

for…do…done

    相对于while、until的循环方式是必须要“符合某个条件”的状态,for这种语法则是“已经知道循环的次数”的状态。

for var in con1 con2 con3 …
do
  程序段
done

    除了上面的方法之外,for循环还有一种写法。

for ( ( 初始值; 限制值; 执行步长 ) )
do
  程序段
done

追踪与调试

    在编写shell script时,很容易出现语法错误或者其它问题,将会导致执行失败,在执行之前可以使用bash的相关参数来进行判断。

bash [-nvx] script.sh
参数:
-n:不要执行script,仅查询语法的问题
-v:在执行script前,先将script的内容输出到屏幕上
-x:将使用到的script内容显示到屏幕上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值