天天看點

思維導圖學 Linux Shell攻略之小試牛刀篇

曾聽一位大神講過,帶着目的去學,知識往往能記得牢,記得穩。借助思維導圖這個工具,對一些我感興趣的知識點進行分類管理。以後友善自己複習。

我會以思維導圖+代碼段的方式,復原學習linux shell程式設計。

思維導圖學 Linux Shell攻略之小試牛刀篇

與使用者互動的接口

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<code>#列印一個普通的字元串</code>

<code>[root@beijing ~]</code><code># echo "it's isa dog"</code>

<code>it's is a dog</code>

<code> </code> 

<code>#列印一個帶有單引号和換行符的字元串,單引号可正常輸出,但換行符沒有效果</code>

<code>#沒有達到想要的效果</code>

<code>[root@beijing ~]</code><code># echo "it's isa dog\n this is new line"</code>

<code>it's is a dog\n this is new line</code>

<code># -e 開啟轉義功能</code>

<code>[root@beijing ~]</code><code># echo -e "it'sis a dog\nthis is new line"</code>

<code>this is new line</code>

<code>-e     </code><code>enable</code> <code>interpretation of backslash escapes</code>

<code>[root@beijing ~]</code><code># echo it is a dog</code>

<code>it is a dog</code>

<code>#紅字</code>

<code>[root@beijing ~]</code><code># echo -e "\e [1;31mthisis a color\e[0m"</code>

<code>this is a color</code>

<code>[root@beijing ~]</code><code># echo -e"\033[1;31mthis is a red color\033[0m"</code>

<code>this is a red  color</code>

<code>#綠底</code>

<code>[root@beijing ~]</code><code># echo -e"\e[1;42mthis is a red color\e[0m"</code>

<code>#紅字綠底</code>

<code>[root@beijing ~]</code><code># echo -e"\e[1;31;42mthis is a red color\e[0m"</code>

<code>#有效數字</code>

<code>echo</code> <code>"scale=3;3/8"</code><code>|</code><code>bc</code>

<code>echo</code> <code>$</code><code>bc</code>

計算

這是程式設計語言的功能之一了

<code>va=1;</code>

<code>vb=2;</code>

<code>#echo $($va+$vb);error</code>

<code>#echo $(va+vb); error</code>

<code>echo</code> <code>[$va+$vb] </code><code>#output :[1+2]</code>

<code>echo</code> <code>$[va+vb]  </code><code>#ok</code>

<code>echo</code> <code>$(($va+$vb)) </code><code>#//ok</code>

<code>let</code> <code>result=$va+vb </code><code>#ok</code>

<code>echo</code> <code>$result</code>

<code>result=`</code><code>expr</code> <code>3 + 1` </code><code>#ok, 注意等号,兩邊不能有空格;result=`expr $va + 1` 也可以</code>

<code>result=$(</code><code>expr</code> <code>$va + 1) </code><code>#ok, 注意等号,兩邊不能有空格,+号必須有空格,否則會當成字元串輸出</code>

内置功能(感興趣而已)

<code>[root@beijing </code><code>test</code><code>]</code><code># exportstr="1234"</code>

<code> </code><code>[root@beijing </code><code>test</code><code>]</code><code># echo $str</code>

<code>1234</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># echo ${#str}</code>

<code>4</code>

這是最基本的,不能語句羅列吧

<code>#括号裡不能有參數,擷取參數通過$1,$2....擷取</code>

<code>function</code> <code>sayhello(){</code>

<code>         </code><code>echohello $1</code>

<code>}</code>

<code>#$@:參數清單</code>

<code>#$*:參數字元串</code>

<code>sayhello zgy;</code><code>#這樣調用</code>

可得一個指令的結果

<code>#!/bin/bash</code>

<code> </code><code>commands=</code><code>ls</code><code>|</code><code>cat</code> <code>-n</code>

<code> </code><code>echo</code> <code>$commands </code><code>#輸出為空</code>

<code> </code><code>commands=$(</code><code>ls</code><code>|</code><code>cat</code> <code>-n)</code>

<code> </code><code>#$commands #error</code>

<code> </code><code>echo</code> <code>$commands </code><code>#輸出期望結果</code>

<code> </code><code>echo</code> <code>`$commands` </code><code>#error</code>

<code> </code><code>echo</code> <code>`</code><code>ls</code><code>|</code><code>cat</code> <code>-n` </code><code>#輸出期望結果  反引用</code>

<code>###############################################</code>

<code>#子shell,在子shell操作,不影響主shell</code>

<code>echo</code> <code>`</code><code>pwd</code><code>`;</code>

<code>cd</code> <code>/bin</code>

<code># output#</code>

<code># /root/test</code>

<code># /bin</code>

<code>(</code><code>cd</code> <code>/bin</code><code>)</code>

評定一個算法的效率

<code>start=$(</code><code>date</code> <code>+%s) </code><code>#start=`date +%s`,等号不能有空格,如果有空格,會被變量當成指令</code>

<code>for</code> <code>(( i = 0; i &lt; 100000; i++ ));</code><code>do</code>

<code>         </code><code>echo</code><code>$i &gt;</code><code>/dev/null</code>

<code>done</code>

<code>end=`</code><code>date</code> <code>+%s`</code>

<code>diff</code><code>=$(($end-$start))</code>

<code>echo</code> <code>"use times(ms):"</code><code>$</code><code>diff</code>

<code>echo</code> <code>"use times(ms):"</code><code>$(($end-$start))</code>

判斷權限等,shell程式設計彙總功能常用

<code>#[[]] 必須有空格</code>

<code>#是否是檔案,檔案是否存在</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -f 1.txt ]]&amp;&amp; echo "1.txt is file" || echo  "1.txt is notfile"</code>

<code>1.txt is </code><code>file</code>

<code>#是否是可執行檔案</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -x 1.txt ]]&amp;&amp; echo "1.txt can be execute" ||  echo  "1.txt can be execute"</code>

<code>1.txt can be execute</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -x 1.txt ]]&amp;&amp; echo "1.txt can be execute" ||  echo  "1.txt can't be execute"</code>

<code>1.txt can't be execute</code>

<code> </code><code>[root@beijing </code><code>test</code><code>]</code><code># chmod  +x 1.txt</code>

<code>1.txt can be  execute</code>

<code>[root@beijing </code><code>test</code><code>]</code><code>#</code>

<code>#是否是目錄</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -d 1.txt ]]&amp;&amp; echo "1.txt is dir" || echo  "1.txt is't dir"</code>

<code>1.txt is't </code><code>dir</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -d /bin ]]&amp;&amp; echo "1.txt is dir" || echo  "1.txt is't dir"</code>

<code>1.txt is </code><code>dir</code>

<code>#判斷是空串嗎?</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -z"1" ]] &amp;&amp; echo "is null" ||  echo "is not null"</code>

<code>is not null</code>

<code>[root@beijing </code><code>test</code><code>]</code><code># [[ -z"" ]] &amp;&amp; echo "is null" ||  echo "is not null"</code>

<code>is null</code>

<code>-z 與-n功能相反</code>

小計

看書本,很簡單的代碼,也就是一看就懂的代碼。其實真正自己寫出來,在運作起來得到結果,也不容易。 眼高手低要不得。

我就在寫程式是經常遇到一些這樣情況。有時候要求有空格(比如條件判斷時)。有時候不能有空格(變量指派時)。有時候,單引号有時候又 反引号。哎要注意啊這些小細節,總結經驗。

小小代碼也不簡單。

如果廣大讀者,也可以看着我的腦圖,一步步寫一下腳本,也會有所收獲。

算個開篇吧。斷斷續續,随着學習深入,例子也會逐漸深入。希望自己的shell水準,能有所突破。

繼續閱讀