標籤:style http io os 使用 ar 檔案 資料 div
簡單的 shell script 練習
簡單範例
[[email protected] scripts]# vi sh02.sh#!/bin/bash# Program:#User inputs his first name and last name. Program shows his full name.# History:# 2005/08/23VBirdFirst releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHread -p "Please input your first name: " firstname # 提示使用者輸入read -p "Please input your last name: " lastname # 提示使用者輸入echo -e "\nYour full name is: $firstname $lastname" # 結果由螢幕輸出 |
[[email protected] scripts]# vi sh03.sh#!/bin/bash# Program:#Program creates three files, which named by user‘s input #and date command.# History:# 2005/08/23VBirdFirst releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATH# 1. 讓使用者輸入檔案名稱,並取得 fileuser 這個變數;echo -e "I will use ‘touch‘ command to create 3 files." # 純粹顯示資訊read -p "Please input your filename: " fileuser # 提示使用者輸入# 2. 為了避免使用者隨意按 Enter ,利用變數功能分析檔名是否有配置?filename=${fileuser:-"filename"} # 開始判斷有否配置檔名# 3. 開始利用 date 命令來取得所需要的檔名了;date1=$(date --date=‘2 days ago‘ +%Y%m%d) # 前兩天的日期date2=$(date --date=‘1 days ago‘ +%Y%m%d) # 前一天的日期date3=$(date +%Y%m%d) # 今天的日期file1=${filename}${date1} # 底下三行在配置檔名file2=${filename}${date2}file3=${filename}${date3}# 4. 將檔名建立吧!touch "$file1" # 底下三行在建立檔案touch "$file2"touch "$file3" |
『 $((計算式)) 』:數值運算。bash shell 裡頭預設僅支援整數
[[email protected] scripts]# vi sh04.sh#!/bin/bash# Program:#User inputs 2 integer numbers; program will cross these two numbers.# History:# 2005/08/23VBirdFirst releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHecho -e "You SHOULD input 2 numbers, I will cross them! \n"read -p "first number: " firstnuread -p "second number: " secnutotal=$(($firstnu*$secnu))echo -e "\nThe result of $firstnu x $secnu is ==> $total" |
在數值的運算上,我們可以使用『 declare -i total=$firstnu*$secnu 』 也可以使用上面的方式來進行!基本上,鳥哥比較建議使用這樣的方式來進行運算:
var=$((運算內容))
不但容易記憶,而且也比較方便的多,因為兩個小括弧內可以加上空白位元組!
[[email protected] scripts]# echo $(( 13 % 3 ))1 |
script 的運行方式差異 (source, sh script, ./script)
不同的 script 運行方式會造成不一樣的結果!尤其影響 bash 的環境很大呢!指令碼的運行方式除了前面小節談到的方式之外,還可以利用 source或小數點 (.) 來運行!
script會使用一個新的 bash 環境來運行指令碼內的命令!也就是說,使用這種運行方式時,其實 script 是在子程式的 bash 內運行!『當子程式完成後,在子程式內的各項變數或動作將會結束而不會傳回到父程式中』!
[[email protected] scripts]# echo $firstname $lastname <==確認了,這兩個變數並不存在![[email protected] scripts]# sh sh02.shPlease input your first name: VBird <==這個名字是鳥哥自己輸入的Please input your last name: Tsai Your full name is: VBird Tsai <==看吧!在 script 運行中,這兩個變數有生效[[email protected] scripts]# echo $firstname $lastname <==事實上,這兩個變數在父程式的 bash 中還是不存在的! |
當你使用直接啟動並執行方法來處理時,系統會給予一支新的 bash 讓我們來運行 sh02.sh 裡面的命令,因此你的 firstname, lastname 等變數其實是在中的子程式 bash 內啟動並執行。 當 sh02.sh 運行完畢後,子程式 bash 內的所有資料便被移除,因此上表的練習中,在父程式底下 echo $firstname 時, 就看不到任何東西了!
圖 2.2.1、sh02.sh 在子程式中運行
[[email protected] scripts]# source sh02.shPlease input your first name: VBirdPlease input your last name: TsaiYour full name is: VBird Tsai[[email protected] scripts]# echo $firstname $lastnameVBird Tsai <==嘿嘿!有資料產生喔! |
你不登出系統而要讓某些寫入 ~/.bashrc 的配置生效時,需要使用『 source ~/.bashrc 』而不能使用『 bash ~/.bashrc 』!
圖 2.2.2、sh02.sh 在父程式中運行
第十三章、學習 Shell Scripts 簡單的 shell script 練習