shell 編程筆記

來源:互聯網
上載者:User

標籤:shell 編程筆記

#! /bin/sh
尋找shell解譯器 /bin/sh  是一個路徑
#! /usr/bin/python
只是尋找一個python的解譯器


運行linux程式的方法:
使得檔案具有可執行檔許可權 直接運行
調用解譯器來執行
使用source來執行
shell 存在著內部命令 和外部命令 內建命令就是shell 程式本身的命令
執行內部命令的時候 不包括進程的建立和消亡
但是在執行外部命令的時候,存在著進程是建立和消亡,以此同時
外部命令執行的過程如下:、
建立一個子進程
尋找路徑
子進程執行 父進程休眠
子進程執行完畢,父進程從終端讀取下一條命令


source 命令的執行不會 建立進程 更加的不會有進程的消亡 沒有子進程
只有在父進程中執行。


例如:echo.sh
#! /bin/sh
cd /tmp
echo "hello world"
執行方法選擇的是 賦予許可權的方式的話 ./echo.sh 此時父進程接受命令 發現不是內建命令 就會建立一個子進程(和父進程一模一樣)來執行這個外部命令 此時子進程 來設定自己的環境變數 cd 命令改變的只是子進程的目錄 並沒有改變父進程的目錄 ,子進程執行完成 消亡,父進程等待下個命令執行 所以此方式下的執行 cd命令會失效。


所以選擇的執行方式 是source的形式 就會執行 source不會建立子進程 只是在父進程中進行。


shell變數:
全域變數 環境變數 自訂變數
局部變數 必須使用local聲明 否則還是全域可見的
export 用於設定當前的環境變數  


電腦 不能直接理解進階語言 需要將進階語言 翻譯成機器語言 電腦才能看的明白 翻譯是方式有兩種 一種是:編譯 一種是:解釋
編譯型的語言 是在程式執行之前 需要一個專門的編譯過程 ,只做一次的編譯,啟動並執行時候不需要進行編譯了 執行效率較高
解釋型的語言 是在程式在執行的時候 執行一次 翻譯一次 效率較低。


指令碼參數的傳遞
參數的傳遞 可以將外部的值傳遞到指令碼的內建函式中去,提高指令碼的靈活性。
testfunc()
echo "$# parameters";
echo "[email protected]";


testfunc a b c 
3 parameters 
a b c 
testfunc a "b c"
2 parameters
a b c 


shell中的變數是不區分類型的 都是字串類型 shell變數中有3中:使用者變數 位置變數 環境變數 


linux中shell變數$#,[email protected],$0,$1,$2的含義解釋: 
變數說明: 
$$ 
Shell本身的PID(ProcessID) 
$! 
Shell最後啟動並執行後台Process的PID 
$? 
最後啟動並執行命令的結束代碼(返回值) 有數值的情況下返回數值 成功返回0值 退出的狀態0 表示正常退出 非0表示執行出現異常 
$- 
使用Set命令設定的Flag一覽 
$* 
所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 
[email protected] 
所有參數列表。如"[email protected]"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 
$# 
添加到Shell的參數個數 
$0 
Shell本身的檔案名稱 
$1~$n 
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。 


開機檔案:
/bin/login   讀取/etc/passwd檔案成功登入後,啟動一個互動的shell
/etc/environment 環境變數 
如果需要對shell做全域性的設定 並且在每次的啟動的時候 自動載入 可以將命令寫入開機檔案中去


type用於顯示 命令是什麼類型的 是外部命令 內建命令 別名...
shell 的函數
#! /bin/sh
# 數字相加


function add(){
let "sum=$1+$2"
return $sum
}
執行:
source add.sh 將函數從檔案中讀入 之後可以直接調用
add 3 7
echo $? $? 儲存是上一次的命令執行的返回值
7


shell的條件控制與流程


if condition
then 
statements
elif contition
then 
statements
else
statements
fi
shell裡面的case語句 
case $1 in
-f) statements;;
-d) statements;;
esac 


for 迴圈語句
for name [in list]
do 
....
done
for file in `find . -iname "*.mp3"` //反單引號的作用就是將命令返回的結果作為字串
do
mpg123 $file
done


無限迴圈 
path=$PATH
while true
do
if [-z $path]
then
break;
fi
ls -ld ${path%%:*}//列出path中第一個目錄
path=${path#*:}//截取path中的第一個目錄和冒號
done


Tips:
位置參數可以用shift命令左移。比如shift 3表示原來的$4現在變成$1,原來的$5現在變成$2等等,原來的$1、$2、$3丟棄,$0不移動。
不帶參數的shift命令相當於shift 1。
非常有用的 Unix 命令:shift。我們知道,對於位置變數或命令列參數,其個數必須是確定的,
或者當 Shell 程式不知道其個數時,可以把所有參數一起賦值給變數$*。
若使用者要求 Shell 在不知道位置變數個數的情況下,還能逐個的把參數一一處理,
也就是在 $1 後為 $2,在 $2 後面為 $3 等。在 shift 命令執行前變數 $1 的值在 shift 命令執行後就不可用了。


linux shell裡面的Regex:
定義:
簡而言之,Regex就是記錄文本規則的代碼。
Regex:元字元 
\b 代表著單詞的開頭或是結尾
\d 代表著數字 例如0\d{2}-\d{8} 意思就是 010-12345678
grep 尋找文本
Regex中的元字元:
^ :行或者字串開始
$ :行或字串結束
. :匹配一個非分行符號的字元
* :匹配0個或多個先前字元 .* 代表任一字元
[...] :方括號運算式 [0-9]匹配單個數字 ^位於括號運算式的開頭表示相反的意思[^0-9]不是0-9之間的數字
\ :開啟或者關閉後續字元
Regex:基本Regex 和擴充Regex
\(\): 
\n:
x\{m,n\}: 區間運算式 x出現的次數 最少m次 最多n次 
+: 匹配前面Regex的一個或者多個執行個體
?: 匹配前面Regex的一個或者0個執行個體
():用括弧括起來的Regex
|: 匹配|前面或者後面的Regex


grep支援的元字元
\<: 單詞的開始
/>: 單詞的結束
\w: 匹配文字或是數字 [:alnum:]
\W: 匹配非文字或是數字 [[:alnum:]_]
\b: 單詞的鎖定符


字元集:
[:alnum:]: 文字數字字元集 A-Za-z0-9
[:alpha:]: 文字字元集
[:blank:]: 空格或者定位字元
[:digit:]: 數字字元
[:graph:]: 非Null 字元
[:lower:]: 小寫字元
[:cntrl:]: 控制字元
[:print:]: 非Null 字元
[:punct:]: 標點符號
[:space:]: 空白字元
[:upper:]: 大寫字元
[:xdigit:]: 十六進位數字 0-9 a-f A-F


Regex裡面的反向引用:
\(ab\)\(cd\)[efg]*\1\2 用來匹配: abcdabcd abcdeabcd abcdfabcd abcdgabcd \1: ab \2: cd 
\(go\).*\1 用來匹配一行出現了2個go
交替 | you|me 用來匹配 you 或者 me 交替的優先順序是最低的
分組() (go)+ 匹配了一個go 或者是多個go 


羅馬數字:
I=1
V=5 
X=10
L=50
C=100 CD=400 DC=600
D=500
M=1000 MCM=1900

shell 編程筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.