1. 程式人生 > >Shell指令碼(三)-Shell中的變數、函式及read命令

Shell指令碼(三)-Shell中的變數、函式及read命令

在Shell指令碼中,通常需要在Shell命令使用其他資料來處理資訊。這就需要使用變數來實現,變數可以將資訊臨時儲存在Shell執行環境中,以便和指令碼中的其他命令一起使用。

變數的型別

系統變數:系統變數通常寫在/etc/profile或/etc/profile.d中,對所有使用者生效
使用者變數:使用者變數通常寫在使用者的個人配置檔案中,只對當前使用者生效
環境變數:環境變數只在當前Shell中生效,Shell關閉則變數消失

變數命名規則

命名只允許使用英文字母、數字和下劃線,首字元不能為數字
中間不能有空格,可以使用下劃線(_)
不能使用標點符號

特殊字元的含義

\                ##轉譯單個字元
""                ##弱引用,批量轉譯""中出現的字元,不能轉譯 \ ` ! $
''                ##強引用,批量轉譯''中出現的字元
``                ##將''中命令的輸出資訊,賦值給變數,同 $()
${}                ##變數宣告,在需要時,用來確定變數邊界

$?                ##是命令在執行完成後產生的退出值,當$?=0時表示命令沒有錯誤輸出

位置變數

$$                ##當前程序ID
$0                ##指令碼本身
$1                ##第一個引數
$2                ##第二個引數
$3                ##第三個引數
$#                ##引數總個數
$*                ##所有引數,全部引數合為一個字串
[email protected]                ##所有引數,每個引數為獨立的字串

read命令

read命令是實現互動式shell指令碼的命令,將輸入的內容傳遞至相關變數,供shell指令碼使用
-s            ##加密,不顯示
-p "列印內容"  ##列印提示語

示例:
[
[email protected]
shell]# vim ip_check.sh #!/bin/bash                                    ##宣告直譯器為bash read -p "Please input a IP address: " IP       ##顯示提示資訊,將使用者輸入內容傳遞至變數IP ping -c1 -w1 $IP &> /dev/null                  ##ping $IP地址一次,將輸出內容丟進垃圾箱 [ $? = 0 ] && {                                ##如果$?值為0,表示沒有錯誤輸出,&&條件成立,則         echo "$IP is up"                       ##顯示 $IP is up         exit 0                                 ##退出指令碼 } || {                                         ##||條件不成立,則         echo "$IP is down"                     ##顯示 $IP is down         exit 1                                 ##退出指令碼 } [
[email protected]
shell]# sh ip_check.sh Please input a IP address: 172.25.254.80 172.25.254.80 is up [[email protected] shell]# sh ip_check.sh Please input a IP address: 192.168.0.1 192.168.0.1 is down

函式

指令碼中的函式,是把一個複雜的語句,定義成一個字串的方法
建立一個指令碼來測試函式的作用
[[email protected] shell]# vim user_ctrl.sh
#!/bin/bash
USER_ADD()        ##定義USER_ADD函式
{
        read -p "Please input username: " USERADD
        useradd $USERADD && {
                read -s -p "Please input a Password: " PASSWORD
                echo $PASSWORD | passwd --stdin $USERADD
                }
}

USER_DEL()        ##定義USER_DEL函式
{
        read -p "Please input need to del username: " USERDEL 
        userdel -r $USERDEL && echo deleted succeesfully!
}

ACTION()          ##定義ACTION函式
{
        read -p "Please input you Action(list:l) : " Action    ##使用者輸入內容為變數Action值
        [ $Action = l ] && echo Action : add del exit          ##變數Action = l 時,執行echo
        [ $Action = exit ] && exit 0     ##變數Action = exit時,退出,退出值=0
        [ $Action = add ] && USER_ADD    ##變數Action = add時,執行函式USER_ADD
        [ $Action = del ] && USER_DEL    ##變數Action = del時,執行函式USER_DEL
        ACTION                           ##執行ACTION
}
ACTION                                   ##函式名直接呼叫函式塊內容

測試指令碼:
[[email protected] shell]# sh user_ctrl.sh     ##執行指令碼
Please input you Action(list:l) : l       ##輸入l
Action : add del exit
Please input you Action(list:l) : add     ##輸入add
Please input username: user1
useradd: user 'user1' already exists
Please input you Action(list:l) : add
Please input username: user2
Please input a Password: Changing password for user user2.
passwd: all authentication tokens updated successfully.
Please input you Action(list:l) : del     ##輸入del
Please input need to del username: user1
deleted succeesfully!
Please input you Action(list:l) : exit
[[email protected] shell]# su - user1          ##user1被成功刪除
su: user user1 does not exist
[[email protected] shell]# su - student
Last login: Thu Jun 21 09:32:41 EDT 2018 on pts/0
[[email protected] ~]$ su - user2           ##user2被成功建立,並且密碼正確
Password: 
Last login: Thu Jun 21 09:52:58 EDT 2018 on pts/0

相關推薦

Shell指令碼-Shell變數函式read命令

在Shell指令碼中,通常需要在Shell命令使用其他資料來處理資訊。這就需要使用變數來實現,變數可以將資訊臨時儲存在Shell執行環境中,以便和指令碼中的其他命令一起使用。變數的型別系統變數:系統變數通常寫在/etc/profile或/etc/profile.d中,對所有使

如何編寫一個優雅的Shell指令碼

如何編寫一個優雅的Shell指令碼(三) 簡介 awk語法 awk內建變數 awk內建函式 awk實踐 awk檔案關聯 awk檔案拆分 總結 簡介 awk是shell腳本里面文字處理神奇

從零開始寫shell指令碼1--shell初體驗

初識shell 計算機智慧理解 0 和 1 組成的二進位制語言。 早期計算機通過二進位制語言來執行指令,對人類來說難以理解,讀寫都很不友好。後來,作業系統裡提供了一種叫做shell的特殊的程式。shell接受你的英文格式(大多數情況下是英文)指令,如果指令有

從頭開始寫專案Makefile:make內嵌函式make命令顯示

   【版權宣告:轉載請保留出處:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】     這一節我們講一下make的函式,在之前的章節已經講到了幾個函式:wildcard、patsubst、notdir、shell

Shell腳本筆記shell的數學計算

pos 使用 pan 數學計算 options ons post ash 用法 shell中的數學計算 一、使用方括號 #!/bin/bash a=10 b=29 c=88 res=$[$a * ($c-$b)] echo $res 二、bc的用法 bc技術器實際上

Linux命令列與shell指令碼14--在函式使用陣列

陣列變數和函式 傳遞陣列給函式 function testit(){ local new_array; new_array=(`echo [email

Linux系統 shell基礎

water process sort命令 分隔 img type 示例 tail 正則 一、shell中的特殊符號 號:通配符,可以匹配零個或任意多個字符? 號:單配符,#號:註釋符,該符號後跟的命令或參數不會執行\號:加註在特殊符號前使其失去指令意義|管道符:把一條命令的

shell學習

done localhost $0 ash strong nbsp $2 pan value 1、位置變量 腳本: [root@localhost sh]# cat /opt/sh/test1.sh #/bin/bashecho "你執行的腳本名稱及路徑為: "$0ec

Linux shell示例

\n str ons echo return NPU inux pre ech example No. 1作為shell編寫人員,要避免使用者輸入數據的格式不正確,也就是要在shell腳本發布前攔截可能的錯誤;本示例是對使用者輸入的數據(或位置變量)進行判斷是否可用,然後在

自動化運維:3寫一個簡單的Shell指令碼案例

一、需求 1、test.sh 指令碼執行時候需要新增引數才能執行 引數和功能詳情如下: 引數 執行效果 start 啟動中... stop 關閉中... restart 重啟中... * 指令碼幫

Shell入門陣列基本運算子

Shell 陣列 陣列中可以存放多個值。Bash Shell 只支援一維陣列(不支援多維陣列),初始化時不需要定義陣列大小(與 PHP 類似)。 與大部分程式語言類似,陣列元素的下標由0開始。 Shell 陣列用括號來表示,元素用”空格”符號分割開,語法格式如下: array_n

Shell入門Shell指令碼環境

Shell 教程 Shell 是一個用C語言編寫的程式,它是使用者使用Linux的橋樑。Shell既是一種命令語言,又是一種程式設計語言。 Shell 是指一種應用程式,這個應用程式提供了一個介面,使用者通過這個介面訪問作業系統核心的服務。 Shell 指令碼 Shell

Linux基礎--shell指令碼1

shell程式設計:      主要指令碼維護,用於偵聽使用者輸入指令,接受到這些指令,執行相應操作。     指令可以執行,靠的是shell環境變數     設定環境變數  &nbs

Linux基礎--shell指令碼5

================================ while 迴圈          init     while [ con ]     do  &n

Linux基礎--shell指令碼4

判斷語句     格式五     if [ con1 ]     then         cmd1     elif

Linux基礎--shell指令碼3

選擇結構     格式一:         if [ con ]         then      &nb

Linux基礎--shell指令碼2

實現shell指令碼     1 建立指令碼檔案         touch file.sh     2 實現指令碼       

linux學習筆記之shell程式設計流程控制3---for迴圈

for迴圈 語法格式1:指定迴圈範圍 for 變數 in value1 value2... do something done 指令碼例項1 #!/bin/bash for i in 1 2

linux學習筆記之shell程式設計流程控制4while迴圈和until迴圈

while迴圈和until迴圈 ###、 while迴圈 不定迴圈,程式碼格式: while [判斷] do something done 指令碼例項1: #!/bin/bash #從1加到

刪除過期檔案的shell指令碼linux

在linux下如何刪除過期的檔案 crontab -e  中新增      0 0 * * * find /home/jms -type f -mtime +2 -exec&