linux----shell脚本编写

一、创建.sh的脚本文件  touch test.sh

有一个问题需要约定一下,凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样做的目的是,一来可以更好的管理文档;二来以后接管你的管理员都知道自定义脚本放在哪里,方便维护。

若权限不够可以sudo su一下,再创建

二、编辑.sh的shell脚本  vim

注意:vim与vi区别,vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。选用vim即可

vim test.sh 

i  (输入)

#!/bin/bash   ( 它代表的意思是,该文件使用的是bash语法。如果不设置该行,那么你的shell脚本就不能被执行)

#注释内容

date   (打印当前系统的时间)

echo "hello world."

按ESC键

:wq!

三、运行shell脚本 sh -x test.sh      sh test.sh

 使用sh命令去执行一个shell脚本的时候是可以加-x选项来查看这个脚本执行过程的,这样有利于我们调试这个脚本哪里出了问题。

几种date常见的用法:

%Y表示年,%m表示月,%d表示日期,%H表示小时,%M表示分钟,%S表示秒

注意%y和%Y的区别。

-d 选项也是经常要用到的,它可以打印n天前或者n天后的日期,当然也可以打印n个月/年前或者后的日期。

另外星期几也是常用的

四、shell脚本中的变量

1、定义变量的格式为变量名='变量的值'。当在脚本中引用变量时需要加上’$’符号

2、用shell计算两个数的和。[ ]

数学计算要用’[ ]’括起来并且外头要带一个’$’。脚本结果为:

3、Shell脚本还可以和用户交互。read

read命令,它可以从标准输入获得变量的值,后跟变量名。”read x”表示x变量的值需要用户通过键盘输入得到。脚本执行过程如下:

4、read -p 选项类似echo的作用。我们不妨加上-x选项再来看看这个执行过程:

在test4.sh中还有更加简洁的方式。

read -p 选项类似echo的作用。执行如下:

5、预设变量

你有没有用过这样的命令”/etc/init.d/iptables restart “ 前面的/etc/init.d/iptables 文件其实就是一个shell脚本,为什么后面可以跟一个”restart”? 这里就涉及到了shell脚本的预设变量。实际上,shell脚本在执行的时候后边是可以跟变量的,而且还可以跟多个。

执行过程如下:

在脚本中,你会不会奇怪,哪里来的$1和$2,这其实就是shell脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字。不妨把脚本修改一下。

执行结果想必你也猜到了吧。

五、shell脚本中的逻辑判断

1、if    fi

如果你学过C或者其他语言,相信你不会对if 陌生,在shell脚本中我们同样可以使用if逻辑判断。在shell中if判断的基本语法为:

1)不带else

if 判断语句; then

command

fi

在if1.sh中出现了 ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式,即可。执行结果为:

2)带有else

if 判断语句 ; then

command

else

command

fi

执行结果为:

3)带有elif

if 判断语句一 ; then

command

elif 判断语句二; then

command

else

command

fi

这里的 && 表示“并且”的意思,当然你也可以使用 || 表示“或者”,执行结果:

(4)以上只是简单的介绍了if语句的结构。在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)。

再看看if中使用 && 和 ||的情况。

(5)shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用的也就几个选项:

-e :判断文件或目录是否存在

-d :判断是不是目录,并是否存在

-f :判断是否是普通文件,并存在

-r :判断文档是否有读权限

-w :判断是否有写权限

-x :判断是否可执行

使用if判断时,具体格式为: if [ -e filename ] ; then

(6)在shell 脚本中,除了用if来判断逻辑外,还有一种常用的方式,那就是case了。具体格式为:

case 变量 in

value1)

command

;;

value2)

command

;;

value3)

command

;;

*)

command

;;

esac

上面的结构中,不限制value的个数,*则代表除了上面的value外的其他值。下面笔者写一个判断输入数值是奇数或者偶数的脚本。

$a 的值或为1或为0,执行结果为:

也可以看一下执行过程:

case脚本常用于编写系统服务的启动脚本,例如/etc/init.d/iptables中就用到了,你不妨去查看一下。

六、shell脚本中的循环

Shell脚本中也算是一门简易的编程语言了,当然循环是不能缺少的。常用到的循环有for循环和while循环。下面就分别介绍一下两种循环的结构。

1、for循环

脚本中的seq 1 5 表示从1到5的一个序列。你可以直接运行这个命令试下。脚本执行结果为:

通过这个脚本就可以看到for循环的基本结构:

for 变量名 in 循环的条件; do

command

done

循环的条件那一部分也可以写成这样的形式,中间用空格隔开即可。你也可以试试,for i in `ls`; do echo $i; done 和 for i in `cat test.txt`; do echo $i; done

2、while

再来看看这个while循环,基本格式为:

while 条件; do

command

done

脚本的执行结果为:

另外你可以把循环条件忽略掉,笔者常常这样写监控脚本。

while :; do

command

done

七、shell脚本中的函数

函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。有时候脚本中的某段代码总是重复使用,如果写成函数,每次用到时直接用函数名代替即可,这样就节省了时间还节省了空间。

fun.sh 中的sum() 为自定义的函数,在shell脚本中要用

function 函数名() {

command

}

这样的格式去定义函数。

上个脚本执行过程如下:

有一点笔者要提醒你一下,在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的。

八、同时执行多个命令

在shell脚本中:

命令;

命令;

命令;

猜你喜欢

转载自blog.csdn.net/mao_xiaoxi/article/details/86622347
今日推荐