shell脚本自学笔记

一、 什么是Shell脚本

shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。

假如完成某个需求需要一口气输入10条命令,对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。我们可以把这10条命令都记录到一个文档中,然后去调用文档中的命令,这样就能一步操作完成,以后再遇到这个需求的时候也只需要调用这个文档就行了,这个文档就是shell脚本,只是这个文档有它特殊的格式。

shell脚本能帮我们很方便地管理服务器,我们可以指定一个任务计划,定时去执行某个shell脚本以满足需求。


二、shell脚本的创建和执行

下面来编写第一个脚本:

 vim first.sh				#写入下面内容
#!/bin/bash
## This is my first shell script.
## Writen by lzx 2018-7-27

date
echo "Hello World!"

shell脚本通常都以.sh作为后缀名,不是说不加.sh的脚本不能运行,只是大家的习惯,这样也方便辨识。

上面,第一行要以#!/bin/bash开头,表示该文件使用的是bash语法,不设置该行也可以执行,但不符合规范。

#表示注释,后面跟一些该脚本的相关注释内容,以及作者、创建日期或版本等。注释可以省略,但不建议省略,因为我们的记忆力有限,没有注释我们自己都不知道自己写的脚本是用来干什么的、是什么时候写的。建议从一开始就要养成写脚本的良好习惯,方便自己也方便他人。

下面来执行上面的脚本:

# sh first.sh				#用sh命令来执行
20180727日 星期五 09:42:54 CST
Hello World!

还有一种执行方式:

# ./first.sh				#./表示当前目录
-bash: ./first.sh: 权限不够

# chmod +x first.sh				#给执行权限

# ./first.sh
20180727日 星期五 09:44:09 CST
Hello World! 

使用上面方法来执行shell脚本的前提是脚本本身有执行权限,所以需要给脚本加一个x权限。

另外,使用sh命令来执行脚本时,可以加-x选项来查看脚本的执行过程:

# sh -x first.sh 
+ date
20180727日 星期五 09:49:22 CST
+ echo 'Hello World!'
Hello World!

三、命令date

# date				#显示当前时间

四、Shell脚本中的变量

shell脚本中的变量可以是一个数值、一个命令或者一个路径。定义变量的格式为:变量名=变量的值,在脚本中引用变量的值时需要加上符号$。


五、数字运算

在脚本中进行数字运算,也会用到变量。

下面再自定义一个脚本:

#! /bin/bash 
## For get the sum of two numbers.
## Writen by lzx 2018-7-27

a=1
b=2
sum=$(($a+$b))
echo "$a+$b=$sum"
1+2=3 

数学计算要用((…))括起来,并且前面要加上符号$。


六、获取用户输入

read命令用于和用户交互,它把用户输入的字符串作为变量值,用法如下:

#!/bin/bash
## Using 'read' in shell script.
## Writen by lzx 2018-7-27

read -p "Please input a number:" x
read -p "Please input another number:" y
sum=$[$x+$y]
echo "The sum of two numbers is:$sum"
Please input a number:5
Please input another number:11
The sum of two numbers is:16

七、if语句

不带else

具体格式如下:

if 判断语句;then
   command
fi

下面自定义一个脚本:

#!/bin/bash

read -p "Please input your score: " a
if ((a<60));then
        echo "You didn't pass the exam."
fi

上面出现了((a<60))这样的形式,表示里面的是一个数学运算,(( ))这是shell脚本特有的格式,只用一个小括号或不用括号都会报错,要记住这个格式。

带有else

具体格式如下:

if 判断语句
then
    command
else
    command
fi

带有elif

具体格式如下:

if 判断语句1;then
    command
elif 判断语句2;then
    command
else
    command
fi

判断数值大小除了可以使用((
))的形式外,还可以使用[],但不能使用>、<、=这样的符号了,要使用-lt(小于)、-gt(大于)、-le(小于或等于)、-ge(大于或等于)、-eq(等于)、-ne(不等于)。


八、和文档相关的判断

shell脚本中if还经常用于判断文档的属性,比如判断是普通文件还是目录,判断文件是否可读、写、执行权限等。

if 常用的选项有以下几个:

-e :判断文件或目录是否存在
-d :判断是不是目录以及是否存在
-f :判断是不是普通文件以及是否存在
-r :判断是否有读权限
-w :判断是否有写权限
-x :判断是否有执行权限

具体格式如下:

if [ -e filename ]
then
    command
fi

示例如下:

# if [ -d /home/ ]; then echo ok; fi
ok

# if [ -f /home/ ]; then echo ok; fi

/home/是目录而非文件,所以在判断它是否为文件时并不会显示ok。


九、case逻辑判断

在shell脚本中,除了使用if来判断逻辑外,还可以使用case。

具体格式如下:

case    变量    in
value1)
        command
        ;;
value2)
        command
        ;;
value3)
        command
        ;;
*)
        command
        ;;
esac

下面自定义一个脚本:

#!/bin/bash

read -p "Input a number: " n
a=$[n%2]
case $a in
1)
        echo "The number is odd."				# odd:奇数
        ;;
0)
        echo "The number is even."				# even:偶数
        ;;
*)
        echo "It's not a number!"
esac

case脚本常用于编写系统服务的启动脚本。


十、for循环

具体格式如下:

for 变量名 in 循环的条件
do
    command
done

下面自定义一个脚本:

#!/bin/bash 

for i in `seq 1 5`; do				# seq 1 5 表示从15的一个序列
        echo $i
done

上面,循环的条件是引用系统命令的执行结果seq 1 5,但必须用反引号括起来。


十一、while

日常运维工作中,也会经常用while循环来编写死循环的脚本,用于监控某项服务。

具体格式如下:

while 条件
do
    command
done

下面自定义一个脚本:

#!/bin/bash 

a=6
while [ $a -ge 1]
do
        echo $a
        a=$[$a-1]
done
6
5
4
3
2
1

另外,可以用一个冒号:代替循环条件,这样就可以做到死循环。


十二、exit

exit,它作用的范围更大,直接退出整个shell脚本


目前这些是我们常用的,毕竟咱不是搞运维的,更多的是用它写一写简单的脚本来存储命令。下面我将以px4安装脚本为例说明shell脚本使用:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值