鳥哥的Linux私房菜基礎篇 第十三章 shell scripts
1 shell scripts 概念
望文生義:針對shell 寫成的指令碼,或者叫劇本。
簡單的說,shell scripts就是早期DOS年代的批處理檔案(.dat).
作用:
- 自動化管理
- 追蹤與管理系統的重要工作
- 簡單入侵偵測功能
- 連續指令單一化
- 簡單的資料處理
- 跨平臺支援與學習歷程短
例子:
#!/bin/bash
# Program:
# This program shows "Hello World!" in your screen.
# History:
# 2015/07/16 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Hello World! \a \n"
exit 0
2 練習
- 對話式:
#!/bin/bash
# Program:
# User inputs his first name and last name. Program shows his full name.
# History:
# 2015/07/16 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
read -p "Please input your first name: " firstname # 提示使用者輸入
read -p "Please input your last name: " lastname # 提示使用者輸入
echo -e "\nYour full name is: ${firstname} ${lastname}" # 結果由螢幕輸出
- 日期命名檔案:
日期的格式化輸出:date +%Y%m%d
#!/bin/bash
# Program:
# Program creates three files, which named by user's input and date command.
# History:
# 2015/07/16 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
# 1 讓使用者輸入檔名稱,並取得 fileuser 這個變數;
echo -e "I will use 'touch' command to create 3 files." # 純粹顯示資訊
read -p "Please input your filename: " fileuser # 提示使用者輸入
# 2 為了避免使用者隨意按 Enter ,利用[變數功能](../Text/index.html#variable_other_re)分析檔名是否有設定?
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}"
- 數值運算:
declare 可以宣告為變數
使用$(())也可以表明是變數
sum=1+2+3
echo $sum
declare -i sum=1+2+3
echo $sum
read -p "second num" sed
total=$(($sum+$sed))
echo $total
計算PI的程式。為了確認VM的效率實驗,保持計算機的忙碌狀態,可以使用這個程式執行。
3 script執行方式的區別
- source script
- sh script
- ./script
- 直接執行script,sh(bash) script或者絕地相對路徑
是重新開一個新的bash環境來進行的。 - 利用source來進行執行
是子啊父程式執行
4 判斷式
test指令
test -e /tmp && echo "exist" || echo "not exist"
test ${HOME} == ${MAIL}
[ ] 判斷符號
[ "$HOME" == "$MAIL" ] #一個=與兩個==等價
#在中括號中每個元素都需要空白格
#變數需要用“”
#常熟需要用單或雙引號
#!/bin/bash
read -p "Please input (Y/N): " yn
[ "${yn}" == "Y" -o "${yn}" == "y" ] && echo "OK, continue" && exit 0
[ "${yn}" == "N" -o "${yn}" == "n" ] && echo "Oh, interrupt!" && exit 0
echo "I don't know what your choice is" && exit 0
$0,$1等預設變數
/path/to/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
$#: 代表後面的引數個數
$@: 代表"$1" “$2” “$3” “$4” ,每個變數獨立。
$*: 代表" $1 $2 $3 $3 "
shift:造成引數變數號碼偏移
echo "your whole parameter is $@"
shift 1
ehco "your whole parameter is $@"
5 條件判斷式
單層,基本條件判斷結構
if []; then
...
fi
多層結構
if [];then
elif [] ;then
else
fi
利用function功能
function fname() {
…
}
由於shell script的執行是由上而下,由左至右,因此在 shell script 當中的
function 的設定一定要在程式的最前面。
function 擁有內建變數,它的內建變數,$0,$1… 此處與shell script的不同。
6 迴圈(loop)
不定迴圈
while do done, until do done
固定迴圈
for var in con1 con2…
do
…
done
eg1:
for var in con1 con2 con3 ...
do
程式段
done
eg2:
users=$(cut -d ':' -f1 /etc/passwd) # 擷取帳號名稱
for username in ${users} # 開始迴圈進行!
do
id ${username}
done
eg3:
for i in $(seq 1 100) # for i in {1..100}
do
echo -ne $i #不自動換行
done
for…do…done的數值處理
for ((初始值;限制值;執行步長))
do
..
done
eg:
s=0
for ((i=1;i<=10;i=i+1))
do
s=$(($s+$i))
done
echo $s
7 shell script的追蹤與除錯
[dmtsai@study ~]$ sh [-nvx] scripts.sh
選項與引數:
-n :不要執行 script,僅查詢語法的問題;
-v :再執行 sccript 前,先將 scripts 的內容輸出到螢幕上;
-x :將使用到的 script 內容顯示到螢幕上,這是很有用的引數!
相關文章
- 鳥哥私房菜-基礎篇小筆記筆記
- 鳥哥的Linux私房菜基礎篇 第十章認識和學習bash這個shellLinux
- 鳥哥的 Linux 私房菜Linux
- 鳥哥的LINUX私房菜_基礎學習篇(第三版)Linux
- PJzhang:鳥哥的linux私房菜-shell指令碼-上Linux指令碼
- 鳥哥的Linux私房菜--CPU種類Linux
- 鳥哥的Linux私房菜 -- 電子書(pdf)Linux
- linux學習導讀_鳥哥的私房菜Linux
- 鳥哥的Linux私房菜基礎篇 第十二章 正規表示式與檔案格式化處理Linux
- linux-鳥哥私房菜學習筆記Linux筆記
- 鳥哥的Linux私房菜筆記第六章Linux筆記
- 學習 Shell Scripts(轉載鳥哥)
- 鳥哥私房菜學習筆記(第零章)筆記
- 劉遄:作為一名新人讀完《鳥哥的Linux私房菜》的感想Linux
- MySQL索引基礎--菜鳥篇MySql索引
- 菜鳥學Linux第055篇筆記php基礎Linux筆記PHP
- 《鳥哥的Linux私房菜:伺服器架設篇 第三版.pdf》PDF高清完整版-免費下載Linux伺服器
- 鳥哥的linux基礎學習實訓教程Linux
- 「Linux」鳥叔私房菜第五章讀書筆記Linux筆記
- 菜鳥筆記之pwn工具篇--Pwndbg基礎使用筆記
- Linux私房菜筆記01Linux筆記
- python基礎教程|菜鳥教程Python
- 菜鳥學習筆記:Java基礎篇1(基礎語法、物件導向)筆記Java物件
- 菜鳥請教rbac的基礎知識
- Scala菜鳥進階之路一 基礎
- Linux“菜鳥”到“菜鳥的一些建議Linux
- Linux菜鳥到老鳥的那些建議Linux
- shell基礎篇(二)-shell變數變數
- shell scripts
- 網易遊戲的會員私房菜遊戲
- 菜鳥小白的測試基礎理論總結(一)
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第十節:Shell程式設計入門(二)SparkLinux大資料程式設計
- Linux shell 基礎Linux
- 和菜鳥一起學linux之DBUS基礎學習記錄Linux
- python菜鳥教程學習3:基礎語法Python
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第十二節:Shell程式設計入門(四)SparkLinux大資料程式設計
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第十三節:Shell程式設計入門(五)SparkLinux大資料程式設計
- Spark修煉之道(基礎篇)——Linux大資料開發基礎:第十四節:Shell程式設計入門(六)SparkLinux大資料程式設計