• 在Linux中执行shell(bash)脚本的方法 2208笔记


    在Linux中执行shell(bash)脚本的方法

    在Linux中执行shell(bash)脚本的方法可分为

    • 路径直接执行
    • shbash 命令执行
    • 用点 .source 命令执行

    路径直接执行和用用 shbash 会新开子shell来执行脚本
    用点 .source 命令直接在当前shell执行脚本

    演示用脚本

    假设在 /MyBashs/ 有脚本 BashScript001.sh , 全路径名: /MyBashs/BashScript010.sh

    sudo mkdir -p /MyBashs/
    
    • 1
    cd /MyBashs/
    
    • 1
    sudo vi  /MyBashs/BashScript010.sh
    
    • 1
    sudo mkdir -p /MyBashs/ ; cd /MyBashs/ ; sudo vi  /MyBashs/BashScript010.sh
    
    • 1

    脚本头

    #!/bin/bash
    
    • 1

    经测试, 有没有脚本头 ,都可以执行

    
    echo '$!'=$!
    echo '$?'=$?
    echo '$-='$-
    echo '$$='$$
    echo '$@='$@
    echo '$*'=$*
    echo '$%='$%
    echo '$0='$0
    echo '$#='$#
    echo '$1='$1
    echo '$2='$2
    echo '$3='$3
    echo '$4='$4
    echo '$5='$5
    printf '$6='"$6\n"
    printf '$7='"$7\n"
    echo '$8='"$8"
    echo '$9='"$9"
    echo '$10'=$10
    echo '$11'=$11
    echo '$12='$123456789
    echo '$13='${13}
    echo '$14='$14
    echo '$15='"${15}"
    echo '$16='$16
    echo '$17='${17}
    echo '$18'=${18}
    echo '$19'=${19}
    echo '$20'=${20}
    echo '$21'=${21}
    echo '$22='=${22}
    
    
    • 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




    路径执行

    按路径直接执行,需要脚本文件有可执行权限, 一般自己创建的文件有读写权限,但没有可执行权限
    可以用sudo chmod 777 文件路径全名 开启文件全部权限

    开启文件可执行权限的方法
    1. sudo chmod 777 文件路径全名
      777 等效 a=rwx 等效 ugo=rwx 等效 augo=rwx 等效 a+rwx 等效 ugo+rwx 等效 augo+rwx 等效 ugao+xrw
    2. sudo chmod 775 文件路径全名
    3. sudo chmod u+x 文件路径全名
    4. sudo chmod g+x 文件路径全名
    5. sudo chmod o+x 文件路径全名
    6. sudo chmod a+x 文件路径全名
    7. sudo chmod +x 文件路径全名
    8. sudo chmod ugo+x 文件路径全名
    9. sudo chmod ugoa+x 文件路径全名
    10. sudo chmod a+x 等效 sudo chmod ugo+x 等效 sudo chmod augo+x 等效 sudo chmod +x
    11. sudo chmod u=rwx,g=rwx,o=x 文件路径全名
    12. sudo chmod ug=xrw,o=x 文件路径全名
    绝对路径执行
    /MyBashs/BashScript010.sh
    
    • 1
    相对路径执行

    相对路径执行就是进到脚本所在文件夹, 然后 ./脚本

    cd /MyBashs
    ./BashScript010.sh
    
    • 1
    • 2
    配置路径环境变量PATH执行

    配置PATH后, 就能在任意文件夹, 像执行命令一样, 直接输入脚本名就能执行 , 会在子Shell中执行
    配置环境变量中的PATH变量的方法

    • PATH 包含多个路径 , 分隔符是:冒号
    • 系统会在PATH包含的路径中搜索命令 , 能搜索到才会执行.
    • .点表示当前目录
    • PATH在每个Shell进程中是独立的,互不影响
    • export 后, 每新开一个Shell(bash), 都会复制一个父Shell的PATH到子Shell中, 因为 “路径执行” 和 “sh或bash执行” 都会新开一个子Shell去运行脚本, 如果不加export, 则对PATH的修改,在子Shell中不会起作用.
      export只是复制变量到子Shell, 在子Shell中对同名变量的修改不会影响到父Shell的同名变量
    配置临时配置环境变量
    export PATH=$PATH:.
    export PATH=$PATH:/MyBashs
    或
    export PATH=$PATH:.:/MyBashs
    加上双引号更保险
    export PATH="$PATH:."
    export PATH="$PATH:/MyBashs"
    export PATH="$PATH:.:/MyBashs"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样修改的变量,在退出登录时就会失效

    配置本用户的长期环境变量,

    将上面对变量的修改写入 /etc/bashrc 或者 ~/.bashrc

    str=":\/MyBashs" ;\
    fileName='/etc/bashrc';
    [ -f $fileName.bak ] || cp -a $fileName ${fileName}.bak;
    [[ `cat $fileName` == *$str* ]] && ( echo "$fileName文件中,已存在 $str 所以无需设置" ) || (echo "在 $fileName 中加入了 $str")  ; echo $PATH ;
    unset str; unset fileName;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    [[ `cat /etc/bashrc` = */MyBashs* ]] || echo "export PATH=$PATH:/MyBashs" >> ~/.bashrc
    
    • 1




    shbash 命令执行

    shbash 命令会新开shell执行
    在脚本文件夹时可用

    sudo bash BashScript010.sh
    或
    sudo sh BashScript010.sh
    或
    sudo bash ./BashScript010.sh
    或
    sudo sh ./BashScript010.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    不在脚本文件夹时可用全路径

    sudo bash /MyBashs/BashScript010.sh
    或
    sudo sh /MyBashs/BashScript010.sh
    
    • 1
    • 2
    • 3




    用点 .source 命令执行

    .source 会直接在本shell执行, 不会新开子shell

    source是Shell(准确地说是Bash)的内置命令,在Bourne Shell中的等价命令是一个点.,即点命令。
    用source命令执行脚本文件时,是在当前Shell进程中执行,而不是像./与sh方式一样在新的Shell进程中执行,因此早先设置的变量在脚本里是可以读取到的

    • source (从 C Shell 而来)是bash shell的内置命令
    • . 点命令来自 Bourne Shell , 是source的另一种写法(等价)

    在脚本文件夹时可用

    sudo source BashScript010.sh
    或
    sudo . BashScript010.sh
    或
    sudo source ./BashScript010.sh
    或
    sudo . ./BashScript010.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    不在脚本文件夹时可用全路径

    sudo source /MyBashs/BashScript010.sh
    或
    sudo . /MyBashs/BashScript010.sh
    
    • 1
    • 2
    • 3
  • 相关阅读:
    C++ 矩阵乘法
    【好诗选读】新春诗会作品合集|黄晓平 蒋德明 徐书遐|刘红立 孟萌 刘东宏
    【汇编】Debug的使用
    【C++】:类和对象(1)
    echarts柱状图TOP排名
    【论文阅读】Progressive Spatio-Temporal Prototype Matching for Text-Video Retrieval
    一个用python PyQT写的背单词小程序
    蓝牙核心规范(V5.4)10.2-BLE 入门笔记之CIS篇
    93. 复原 IP 地址
    淘宝API常用接口与获取方式
  • 原文地址:https://blog.csdn.net/kfepiza/article/details/126654401