• Linux系统中sh脚本编写


    Linux系统中sh脚本编写

    我们在使用linux系统开发的过程中,经常会遇到一些重复的操作,想copy, push等等。这个时候我们就可以自己编写一个sh脚本,使用sh脚本操作这些重复的动作。直接 sh xx.sh脚本执行命令即可

    #!/bin/sh 和 #!/bin/bash 都是脚本文件的开头,用来指定脚本文件的解释器。其中 #!/bin/sh 指定的是 Bourne shell 解释器,而 #!/bin/bash 指定的是 Bash shell 解释器。

    Bash shell 是 Bourne shell 的增强版,它支持更多的特性和语法。因此,如果脚本中需要使用 Bash shell 特有的语法或特性,就需要使用 #!/bin/bash 来指定解释器。


    1.在编写sh脚本前了解一下基本语法

    1.1 if语句

    这里注意:
    -x:判断 文件夹 是否存在并且是否具有可执行权限
    -f: 判断 判断$myPath是否存在
    -d:判断 文件夹 是否存在
    -n:判断一个变量是否有值

    #!/bin/sh
    myPath="/var/log/httpd/"
    myFile="/var/log/httpd/access.log"
    # -x 判断$myPath是否存在并且是否具有可执行权限
    if [ -x "$myPath" ];then
      #mkdir "$myPath"
    	echo $myPath
    fi
    
    # -d 判断$myPath是否存在
    if [ -d "$myPath" ];then
      #mkdir "$myPath"
    echo $myPath
    fi
    
    # -f 判断$myFile是否存在
    if [ -f "$myFile" ];then
      #touch "$myFile"
    echo $myFile
    fi
    
    # -n 判断一个变量是否有值
    if [ -n "$myVar" ];then
      echo $myVar "is empty"
      exit 0
    fi
    
    # 判断两个变量是否相等
    if [ "$var1" = "$var2" ];then
      echo "$var1 eq $var2"
    else 
      echo "$var1 not eq $var2"
    fi
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    if判断分为三个类型:单分支、双分支、多分支。

    单分支

    [root@bigData01 test]# cat if.sh 
    #!/bin/bash
    read a
    read b
    if (( $a == $b ))
    then
        echo "a和b相等"
    fi
    [root@bigData01 test]# bash if.sh 
    12
    12
    a和b相等
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    双分支

    [root@bigData01 test]# cat if.sh 
    #!/bin/bash
    read a
    read b
    if (( $a == $b ))
    then
        echo "a和b相等"
    else
        echo "a和b不相等,输入错误"
    fi
    [root@bigData01 test]# bash if.sh 
    12
    13
    a和b不相等,输入错误
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    多分枝

    [root@bigData01 test]# cat if.sh 
    #!/bin/bash
    printf "Input integer number: "
    read num
    if ((num==1)); then
        echo "Monday"
    elif ((num==2)); then
        echo "Tuesday"
    elif ((num==3)); then
        echo "Wednesday"
    elif ((num==4)); then
        echo "Thursday"
    elif ((num==5)); then
        echo "Friday"
    elif ((num==6)); then
        echo "Saturday"
    elif ((num==7)); then
        echo "Sunday"
    else
        echo "error"
    fi
    [root@bigData01 test]# bash if.sh 
    Input integer number: 5
    Friday
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    1.2 for语法

    #!/bin/bash
    
    for ((i =1;i<=5;i++));
    do
    	sleep 1
    	echo $i
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 自己写的demo :自动部署前端项目 (自动拉取代码,打包,部署nginx)

    #!/bin/bash
    
    cd /root/workspace/jianda
    echo "***********拉取代码"
    git pull origin gw
    echo "***********打包"
    npm run build
    
    
    echo "***********拷贝新的安装包"
    if [ -d "./jianda" ];then
            echo "jianda文件夹存在"
            rm -r jianda
    else
            echo "文件不存在,不用删除了"
    fi
    
    mv dist jianda
    cp -r src/assets/images/loading/* jianda/assets
    rm -r /var/www/jianda
    cp -r jianda /var/www
    
    echo "拷贝成功"
    
    nginx -s reload
    echo “nginx -s reload success”
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    3.定时执行 shell脚本

    在这里插入图片描述

  • 相关阅读:
    Unity 使用StateMachineBehaviour让动画控制器状态自动关闭跳出
    期货开户公司想恶意滑点是做不到的
    springboot网络设备电子商务网站毕业设计源码171629
    【Linux系统管理】09 文件系统管理 & 高级文件系统管理
    如何让Python2与Python3共存
    web3之女巫(sybil)
    SpringCloud之Sentinel入门
    趣说 | 数据库和缓存如何保证一致性?
    前端最新2022面试题(JS)
    Linux的ssh服务远程管理主机
  • 原文地址:https://blog.csdn.net/qq_43940789/article/details/134484367