使用純文字檔案,將shell 的語法和指令(含外部指令)寫入文字,搭配正規表示法,管線命令,資料流重導向等功能,並提供陣列,條件,判斷,迴圈等重要功能,讓使用者以shell 來編寫程式,達到特定的功能。
1.1 幹嘛學習shell scripts
自動化管理的重要依據。
管理系統的工作,如service的啟動等使用shell scripts
簡單入侵檢測功能。
1.2 第一支script的撰寫與執行
檔案的撰寫注意事項:
1. 檔案從左到右,從上到下執行。
2. 檔案遇到[enter]就執行。
3. 檔案忽略多個空格。
4. # 作為批註。
檔案執行注意:
以下兩種方式的執行都是新建了bash來執行。
1. 檔案直接執行,要求檔案具有可讀,可執行許可權。
2. 以bash程式來執行,如 bash *.sh sh *.sh
source 指令碼 :在父環境中執行。
script的模板。
#!/bin/bash
#program:
#程式功能描述
#history
#作者 時間 描述
script 正文
exit 0
對談式指令碼,使用者輸入變數內容
read -p "please input you val" val
數值運算
$((運算內容))
3.1 利用test指令的測試功能
如測試目錄是否存在:test -e /demo && echo "exit" || echo "not exit"
測試標誌代表的意義
1.關於檔名判斷:
-e :該檔案是否存在
-f :該檔名是否存在且為檔案
-d:該目錄是否存在且為目錄
-b:是否存在且為乙個block device裝置
-c: 是否存在且為乙個character device裝置
-s:是否存在且為乙個socket裝置
-l:是否存在且為乙個連線檔
2. 關於檔案許可權偵測
-r:是否存在且可讀
-w:是否存在且可寫
-x:是否存在且可執行
-u:是否存在且具有suid屬性
-g:是否存在且具有sgid屬性。
-k:是否存在且具有stick bit屬性
-s:是否存在且為非空白檔
3. 兩個檔案之間的比較 如 test file1 -nt file2
-nt: 判斷file1是否比file2新
-ot:判斷file1是否比file2舊
-ef:判斷file1與file2是否為同一檔案。
4. 關於兩個整數之間的判定如兩個數字是否相等: test n1 -eq n2
-eq:兩個數字是否相等。
-ne:兩數字不相等。
-gt:判斷n1比n2大
-lt:判斷n1比n2小
-ge:n1大於等於n2
-le:n1小於等於n2
5. 判斷字串
test -z string :判斷字串是否為空,為空返回true
test -n string :判斷字串是否空,為空返回false,注意:-n可不寫。
test str1=str2:判斷兩個字串是否相等。
6 多重判斷如:test -r file -a -x file
-a :同時成立
-o:任何乙個成立
!: 反向狀態
3.2 利用判斷符號
中括號中每個元件需要空格分隔
變數使用雙引號括起來
3.3 shell scripts的預設變數:$0,$1
指令碼檔名為$0;
$#:引數個數。
$@: 所有引數顯示出來。
4.1 利用if .. then
單層簡單判斷式
if [ 條件判斷式 ]; then
執行語句
fi多重複雜條件判斷式
if [ 條件判斷式 ]; then
判斷成功執行的語句
elif [ 條件判斷式 ]; then
判斷成功執行的語句
else
前面判斷都不成功執行的語句
fi4.2 利用case ... esac判斷
case $變數名稱 in
"第乙個變數內容")
程式段;;
"第二個變數內容")
程式段;;
esac
注意: 每個程式段結尾需要兩個分號
4.3 利用function功能
function fname()
注意:fname 為執行指令名稱
需要放在執行指令前面定義。
5.1 不定迴圈
當判斷式成立時執行
while [ 判斷式 ] do
程式段done
當判斷式成立時終止迴圈
until [ 判斷式 ]
do程式段
done
5.2 固定迴圈
用於確定執行次數的迴圈
for var in var1 var2 var3... do
程式段,var為var1 ,var2,var3...
done
for ( ( 初始值; 限制值; 執行步階 ) )
do 程式段;
done
sh [ -nvx ] 指令碼.sh
-n:不執行指令碼僅判斷語法
-v: 執行前將指令碼輸出到螢幕。
-x: 將執行到的指令碼輸出到螢幕
第13章 演算法
一 字串反轉 void char reverse char cha 呼叫 如下 char ch hello,world char reverse ch 二 鍊錶反轉 返回反轉後的煉表頭結點 return newh 三 有序陣列合併 將有序陣列a和b的值合併到乙個陣列result當中,且仍然保持有序 ...
第13章 物件導向程式設計 13
13.13.3 迭代器 randseq和anyiter 1.randseq from random import choice class randseq object def init self,seq self.data seq def iter self return self def nex...
程式設計珠璣第13章
正文 為了解決在12章中的隨機數問題,本章中的目的是對檢視是否在陣列中的情況進行處理。那麼這裡採用了以下幾種方法 1 採用c 的set 2 採用陣列 3 採用鍊錶,順序搜尋,插入時不用移動。結果是陣列的比鍊錶的要快 1 鍊錶需要讀入的記憶體數比陣列大 2 陣列訪問有較好的記憶體相聯性,而鍊錶則不能保...