shell 編程筆記

來源:互聯網
上載者:User

標籤:一模一樣   變數   支援   bre   第一個   定義   source   使用   儲存   

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

: 匹配前面正則表達式的一個或者0個執行個體
():用括弧括起來的正則表達式
|: 匹配|前面或者後面的正則表達式


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


正則表達式裡面的反向引用:
\(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.