輕松讀懂 Bash Shell 腳本

OsvMackinno 7年前發布 | 74K 次閱讀 Linux Bash

開始

#!/bin/bash  # 腳本的第一行叫 shebang,用來告知系統如何執行該腳本
echo Hello, world!

chmod a+x script.sh && sh script.sh # && 上一個指令執行成功執行下一個指令

注意事項

echo 'the first line'; echo 'the second line'  # 每一句指令以換行或分號隔開
echo "There are $(ls | wc -l) items here." # 一個指令可用 $( ) 嵌套在另一個指令內部

變量

# 聲明變量
VARIABLE="Some string" #  每個變量的值都是字符串形式。
VARIABLE = "Some string" #  注意空格 Bash 會把 VARIABLE 當做一個指令,由于找不到該指令,因此這里會報錯。

使用變量

echo $VARIABLE # 如果要使用變量的值, 則要加 $。 echo "$VARIABLE" echo '$VARIABLE' # 注意: ' (單引號) 不會展開變量(即會屏蔽掉變量)。

內置變量

echo "上個進程退出狀態,成功退出,狀態為0,否則,非0: $?" echo "腳本的 PID: $$" echo "參數數目: $#" echo "腳本所有參數: $@" echo "不同位置參數: $1 $2..."</code></pre>

環境變量env

  • PATH 查找可執行文件路徑 在/etc/environment 或 /ect/profile 或 ~/.bashrc
  • HOME home 目錄
  • PWD 當前目錄
  • USER 當前用戶
  • UID root的UID=0
  • SHELL 當前shell版本
  • export PATH=$PATH:/new/path/ 設置環境變量 export 當前shell程序都會繼承這個變量

邏輯控制

#!/bin/bash
echo "What's your name?"
read NAME # 這里不需要聲明新變量
echo Hello, $NAME!

if [ $NAME -ne $USER ] then echo "Your name is you username" else echo "Your name isn't you username" fi

case "$VARIABLE" in

# 列出需要匹配的字符串
0) echo "There is a zero.";;
1) echo "There is a one.";;
*) echo "It is not null.";;

esac

注意 和 $( ) 等價。seq 返回長度為 3 的數組。

for VARIABLE in seq 3 do echo "$VARIABLE" done

在 if 語句中使用 && 和 || 需要多對方括號

if [ $Name == "Steve" ] && [ $Age -eq 15 ] then echo "This will run if $Name is Steve AND $Age is 15." fi

while 循環

while [ true ] do echo "loop body here..." break done</code></pre>

表達式

echo $(( 10 + 5 ))

函數

function foo ()
{
    echo "Arguments work just like script arguments: $@"
    echo "And: $1 $2..."
    echo "This is a function"
    return 0
}
bar ()
{
    echo "Another way to declare functions!"
    return 0
}

foo "My name is" $NAME # 調用函數

試著讀一讀

#!/bin/bash
dir=${PWD}
bfinder=`echo $PATH|grep $dir`
echo $bfinder
if [ "$bfinder" == "" ]
then
    echo "export PATH=/$PATH:${dir}" >> ~/.bash_profile
    export PATH=$PATH:${dir}
fi

將當前文件地址作為默認路徑寫入環境變量

 

 

來自:http://www.jianshu.com/p/6fd715595090

 

 本文由用戶 OsvMackinno 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!