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程式設計(三)流程控制(4)while迴圈和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&