Python之路 【第十九篇】Shell脚本教程
Shell脚本编程
1 Shell是什么
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务, Shell脚本(shell script),是一种为Shell编写的脚本程序。我们经常说的shell通常都是指shell脚本。
shell脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。
编写shell
\#!/usr/bin/env bash # 从系统path中寻找指定脚本的解释程序
mkdir code
cd code
for ((i=0; i<3; i++)); do
touch test\_${i}.txt
echo "shell很简单" >> test\_${i}.txt
done
执行shell
#1 赋予执行权限后,直接运行
chmod +x op_bash.sh
./op_bash.sh
# 2 使用bash命令来运行
bash ./op_bash.sh
2 Shell关键字
常用的关键字如下:
1. echo:打印文字到屏幕
2. exec:执行另一个 Shell 脚本
3. read:读标准输入
4. expr:对整数型变量进行算术运算
6. test:用于测试变量是否相等、 是否为空、文件类型等
7. exit:退出
#!/bin/bash
echo "Hello Shell"
# 读入变量
read VAR
echo "VAR is $VAR"
# 计算变量
expr $VAR - 5
# 执行其他 Shell 脚本
exec ./othershell.sh
# 退出
exit
3 变量
Shell 变量:
- 用户自定义变量
#!/bin/bash
# 定义普通变量
CITY=SHENZHEN
# 定义全局变量
export NAME=cdeveloper
# 定义只读变量
readonly AGE=21
# 打印变量的值
echo $CITY
echo $NAME
echo $AGE
# 删除 CITY 变量
unset CITY
# 不会输出 SHENZHEN
echo $CITY<br></br><br></br>运行结果:<br></br>
SHENZHEN
cdeveloper
21
- 环境变量
#!/bin/bash
echo "print env"
echo $HOME
echo $PATH
echo $TERM
echo $PWD
echo $UID
运行结果:
# 当前主目录
/home/orange
# PATH 环境变量
/home/orange/anaconda2/bin:后面还有很多
# 当前终端
xterm-256color
# 当前目录
/home/orange
# 用户 ID
1000
4 字符串
# 拼接字符串
my_name="jack";
my_age="20岁"
echo $my_name $my_age
echo $my_name$my_age
# 获取长度
echo ${#my_name}
截取字符串
echo ${my_name:0:2}
5 Shell运算
expr 命令:只能做整数运算,格式比较古板,注意空格
[root@baism ~]# expr 1 + 1
2
[root@baism ~]# expr 5 - 2
3
[root@baism ~]# expr 5 \* 2 #注意*出现应该转义,否则认为是通配符
10
[root@baism ~]# expr 5 / 2
2
[root@baism ~]# expr 5 % 2
1
使用bc计算器处理浮点运算,scale=2代表小数点保留两位
[root@baism ~]# echo "scale=2;3+100"|bc
103
[root@baism ~]# echo "scale=2;100-3"|bc
97
[root@baism ~]# echo "scale=2;100/3"|bc
33.33
[root@baism ~]# echo "scale=2;100*3"|bc
300
双小圆括号运算,在shell中(( ))也可以用来做数学运算
[root@baism ~]# echo $(( 100+3))
103
[root@baism ~]# echo $(( 100-3))
97
[root@baism ~]# echo $(( 100%3))
1
[root@baism ~]# echo $(( 100*3))
300
[root@baism ~]# echo $(( 100/3))
33
[root@baism ~]# echo $(( 100**3)) #开方运算
1000000
6 Shell语句
1. if 语句
#!/usr/bin/env bash
a=1
b=2
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
2 for 循环
for ((i=0; i<5; i++)); do
echo "i="$i
done
3 while 语句
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
4 break
#!/bin/bash
for VAR in 1 2 3
do
# 如何 VAR 等于 2 就跳出循环
if [ $VAR -eq 2 ]
then
break
fi
echo $VAR
done
5 continue
#!/bin/bash
for VAR in 1 2 3
do
# 如果 VAR 等于 2,就跳过,直接进入下一次 VAR = 3 的循环
if [ $VAR -eq 2 ]
then
continue
fi
echo $VAR
done
7 Shell函数
# ----定义函数----<br></br><br></br>#!/bin/bash
function hello_world()
{
echo "hello world fun"
echo $1 $2
return 1
}
hello()
{
echo "hello fun"
}<br></br><br></br>#----2 调用函数-----<br></br>
# 1. 直接用函数名调用 hello 函数
hello
# 2. 使用「函数名 函数参数」来传递参数
hello_world 1 2
# 3. 使用「FUN=`函数名 函数参数`」 来间接调用
FUN=`hello_world 1 2`
echo $FUN
<br></br># ----3获取返回值----
hello_world 1 2
# $? 可用于获取前一个函数的返回值,这里结果是 1
echo $?
8 编辑 /etc/crontab文件
crontab -e
在文件最后添加一行:
*/5 * * * * /xxx/check_nginx.sh > /dev/null 2>&1
上表示每 5 分钟,执行一下脚本 /xxx/check\_nginx.sh,其中xxx代表路径
/dev/null 2>&1 的意思是该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
添加完配置,需要重启才能生效
service crond restart