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

标签: bash, echo, root, Python, Shell, VAR, baism

相关文章推荐

添加新评论,含*的栏目为必填