第十三章、學習 Shell Scripts 簡單的 shell script 練習

來源:互聯網
上載者:User

標籤: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" # 結果由螢幕輸出



  • 隨日期變化:利用 date 進行檔案的建立

 

[[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

 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 在子程式中運行
  • 利用 source 來運行指令碼:在父程式中運行

 

[[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 練習

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.