zoukankan      html  css  js  c++  java
  • 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

    运行结果:
    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/
  • 相关阅读:
    Balanced Substring
    解决vscode可以编译通过c++项目,但头文件有红色波浪线的问题
    Poj2299---Ultra-QuickSort
    树状数组
    内置函数
    函数式编程,尾调用,map函数,filter函数,reduce函数
    函数作用域和匿名函数
    函数参数/局部变量与全局变量/前向引用(函数即变量)
    函数的定义
    字符串格式化
  • 原文地址:https://www.cnblogs.com/huahuawang/p/14975094.html
Copyright © 2011-2022 走看看