Python之路 【第十九篇】Shell脚本
Shell脚本编程
1 Shell是什么
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务, Shell脚本(shell script),是一种为Shell编写的脚本程序。我们经常说的shell通常都是指shell脚本。
shell脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。
编写shell
示例1:
#!/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
示例二:
ls | wc #统计文件个数 for i in {00001..00222}; do touch ${i}.txt; done #创建不存在文件 for i in {001..012};do rm -f ${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
运行结果:
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函数
# ----定义函数----
#!/bin/bash function hello_world() { echo "hello world fun" echo $1 $2 return 1 } hello() { echo "hello fun" }
#----2 调用函数-----
# 1. 直接用函数名调用 hello 函数
hello
# 2. 使用「函数名 函数参数」来传递参数
hello_world 1 2
# 3. 使用「FUN=`函数名 函数参数`」 来间接调用
FUN=`hello_world 1 2`
echo $FUN
# ----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
作者:华王
博客:https://www.cnblogs.com/huahuawang/