1. 程式人生 > >shell變量與基本流控語句

shell變量與基本流控語句

shell語句 運算符、參數傳遞等

一環境變量

1 概述

bash shell 使用一種稱為環境變量的特性來存儲有關shell會話和工作環境的信息,該特性還允許假數據存儲到內存中,以便於在shell運行程序或腳本訪問他們,這是一種便捷的、用於存儲持久型數據的方式,這些數據可以標識用戶賬號、系統、shell或任何需要存儲的內容特性。

2 環境變量的分類

1 當前環境變量

僅對當前環境有效,當重新定義時,其將會消失
技術分享圖片

2 用戶環境變量

當用戶切換到普通用戶,此環境變量將無效
技術分享圖片
技術分享圖片

3 系統環境變量

針對系統的所有用戶均有效
查看系統環境變量,
技術分享圖片
設置系統級環境變量

技術分享圖片
技術分享圖片
刷新
技術分享圖片
技術分享圖片

二 用戶別名

alias

1 環境級別名

技術分享圖片
技術分享圖片
重新開啟一個窗口,則提示
技術分享圖片

2 用戶級別名:

技術分享圖片
技術分享圖片
刷新
技術分享圖片
本地窗口查看
技術分享圖片
重新開一個窗口查詢,必須重新開,因為其在開啟時會讀取其中的內容,若使用上次開啟的,則別名的定義不會被讀入其中:
技術分享圖片
切換到一般用戶,則該指令失效
技術分享圖片

3 系統級別別名

定義將其寫入/etc/bashrc文件中
技術分享圖片
技術分享圖片
進行刷新
技術分享圖片
在root用戶下查看全局別名
技術分享圖片
切換到一半用戶模式下進行查看
技術分享圖片
使用
技術分享圖片
4 用戶別名的刪除
1 刪除系統級別名
2 刪除用戶級別名
3 刪除
進行文件刪除
技術分享圖片
並刷新查看
技術分享圖片
進行刪除
技術分享圖片
查看
技術分享圖片

三 參數傳入

1 read 參數傳遞

技術分享圖片
如果不指定-p,則顯示比較單調
選項
-p : 輸出要顯示的指令
技術分享圖片
-s : 表示輸入的結果不回顯
技術分享圖片

  • t : 表示不輸入的超時時間
  • 技術分享圖片
    -n : 接受的字符個數
    技術分享圖片

    2 通過在腳本後面加參數的方式傳遞參數

    $0 表示傳入參數的腳本的名稱,
    $1 表示傳入的第一個參數
    $2 表示傳入的第二個參數
    以此類推
    $# 表示傳入的參數的個數總和
    $* 表示將傳入的所有參數進行整體成一個字符串顯示
    $@ 表示將所有的參數單個顯示出來
    技術分享圖片

    3 函數參數的傳遞

    技術分享圖片
    其中$1 表示函數調用後面的第一個參數
    $2 表示函數調用後面的第二個參數
    以此類推

四 流控語句

1 if

1 普通if 語句
格式
if
條件
then
動作
fi
2 多分支if語句
if
條件
then
動作
elif
條件
then
動作
...
else
動作
fi
技術分享圖片
if循環的匹配效率過低,因為其是從上向依次次匹配,相較於case,則if效率更低

2 case

case 值 in
模式1)

command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac

技術分享圖片
技術分享圖片

3 for 循環語句

1 一般格式

for i in 可遍歷的對象
do
動作
done
技術分享圖片
技術分享圖片

2 特殊格式

for (( i=1 ;i<=9;i++))
do
動作
done
技術分享圖片
技術分享圖片

4 while 循環語句

While 循環用於不斷執行一系列命令,也用於從輸入文件中讀取數據,命令糖廠為測試條件,格式為:

1 while 命令格式

While condition
Do
Commanf
Done

2 一般循環

技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片

2 死循環

技術分享圖片
技術分享圖片

5 expect語句

expect一般用於實現用腳本來自動遠程登錄,對遠程機器執行相關操作

1 安裝

技術分享圖片

2 其腳本的作用是不用起輸入yes或no而進行遠程登錄:

其中上面的 set IP [ lindex $argv 0 ] 表示獲取第一個參數的值給IP這個變量
spawn 表示調用ssh root@$IP 這個動作
"yes/no" { send "yes\r";exp_continue} 表示當遇到前面的命令時執行yes並回車
"password" { send "$AUTH\r"} 表示當遇到password時執行後面的命令。
interact 表示進行繼續操作,如果不加此參數,則自動退出。而不會登錄到node2節點上。
技術分享圖片
技術分享圖片

3 expect 語句嵌套進bash語句中

技術分享圖片
技術分享圖片

4 運算符

1 (())
技術分享圖片
2 let
技術分享圖片
3 expr
技術分享圖片
4 $ [ $a + $b ],必須加號兩邊要有空格:
技術分享圖片
5 bc Linux上的計算機

5 如果編譯多行到一個文件中,可以使用cat

cat >文件名 <<\EOF
要插入的文件內容
第一行文字
第二行文字
第三行文字
EOF
6 sleep 函數:用於設置腳本運行的延遲。
技術分享圖片
7 shift 函數
位置參數可以用shift命令左移。比如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。不帶參數的shift命令相當於shift 1。非常有用的 Unix 命令:shift。我們知道,對於位置變量或命令行參數,其個數必須是確定的,或者當 Shell 程序不知道其個數時,可以把所有參數一起賦值給變量$*。若用戶要求 Shell 在不知道位置變量個數的情況下,還能逐個的把參數一一處理,也就是在 $1 後為 $2,在 $2 後面為 $3 等。在 shift 命令執行前變量 $1 的值在 shift 命令執行後就不可用了。
技術分享圖片
技術分享圖片

六 實戰案例

1 通過配置文件IP和用戶密碼的方式自動獲取該主機的主機名
技術分享圖片
技術分享圖片
技術分享圖片

2 編寫用戶的創建和刪除腳本

技術分享圖片
3 編寫文件的創建與刪除腳本
技術分享圖片

shell變量與基本流控語句