天天看點

Linux之bash腳本程式設計---使用者互動

系統管理部分一:

分區、建立、檢視、調整、挂載、檔案系統的結構、硬連結、軟連結

腳本"文法錯誤"非邏輯錯誤檢測:

# bash -n script.sh

單獨執行,腳本執行每個代碼

# bash -x script.sh

    +        程式在執行

    沒有+    程式過程中應該輸出的資訊

腳本的格式

+++++++++++++++++++++++++++++++++非格式,用于分割++++++++++++++++++++++++++++++++++

#!/bin/bash     ##魔數

# Version: major.minor.release (主版本呈,次版本呈,發行号)

# Author:      ##作者

# Description:   ##對腳本的描述資訊

#号開頭為注釋

read指令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<code>1、檢視所有内建指令</code>

<code>[root@localhost ~]</code><code># enable -a</code>

<code>enable</code> <code>.</code>

<code>...</code>

<code>enable</code> <code>read</code> <code>##内建指令</code>

<code>2、擷取幫助</code>

<code>[root@localhost ~]</code><code># help read</code>

<code>Read a line from the standard input and </code><code>split</code> <code>it into fields.</code>

<code>一行從标準輸入讀入後,以空白字元切割此行成字段,對位儲存字段至變量中</code>

<code>******用于特殊場景,需要人參與的場景**********</code>

<code>read</code> <code>[OPTIONS....] [name...]</code>

<code>    </code><code>-p </code><code>"PROMPT"</code>  <code>## 提示</code>

<code>    </code><code>-t TIMEOUT   </code><code>## 逾時時長,機關為 秒</code>

<code>    </code> 

<code>read</code> <code>-p </code><code>"Enter a name: "</code> <code>name  相當于: </code><code>echo</code> <code>-n </code><code>"Enter a name: "</code><code>; </code><code>read</code> <code>name</code>

使用示例

1、一行從标準輸入讀入後,切割此行成字段,對位儲存字段至變量中

<code>[root@localhost ~]</code><code># read name</code>

<code>hello obama!</code>

<code>[root@localhost ~]</code><code># echo $name</code>

<code>obama</code>

2、對位儲存字段釋義,如果多餘的位,變量為空

<code>[root@localhost ~]</code><code># read a b c</code>

<code>[root@localhost ~]</code><code># echo $a</code>

<code>hello</code>

<code>[root@localhost ~]</code><code># echo $b</code>

<code>obama!</code>

<code>[root@localhost ~]</code><code># echo $c</code>

<code>[root@localhost ~]</code><code>#</code>

3、等待使用者輸入指令

文法: read -p 'PROMPT' name

相當于: echo -n "PROMPT" ; read name

<code>[root@localhost ~]</code><code># printf "Enter a username: "; read name</code>

<code>Enter a username: obama</code>

4、避免使用者不輸入,堵塞在此處,給出逾時。此時變量為空

<code>[root@localhost ~]</code><code># read -t 5 -p 'Enter a name: ' name</code>

<code>Enter a name: [root@localhost ~]</code><code># echo $name</code>

腳本示例:

    提示使用者輸入一個裝置檔案,存在則顯示磁盤資訊。

1、腳本

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

<code># Version: 0.0.1</code>

<code># Author: Lcc.org</code>

<code># Desc: read testing</code>

<code>read</code> <code>-t 5 -p </code><code>'Enter a disk special file: '</code> <code>diskfile</code>

<code>[ -n </code><code>"$diskfile"</code> <code>] || </code><code>exit</code> <code>1        </code><code>## 不存在,則退出</code>

<code>if</code> <code>fdisk</code> <code>-l | </code><code>fgrep</code> <code>"Disk $diskfile"</code> <code>&gt; </code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>then</code>

<code>        </code><code>fdisk</code> <code>-l $diskfile          </code><code>## 條件的執行狀态結果為0</code>

<code>        </code><code>exit</code> <code>0</code>

<code>else</code>

<code>        </code><code>echo</code> <code>"No such file."</code>        <code>## 條件的執行狀态結果不為0</code>

<code>        </code><code>exit</code> <code>1</code>

<code>fi</code>

2、檢測文法錯誤

<code>[root@localhost scripts]</code><code># bash -n test.sh</code>

3、給x權限

<code>[root@localhost scripts]</code><code># chmod +x test.sh</code>

4、給一個路徑測試

18

19

20

21

22

23

24

25

26

<code>1、正确路徑</code>

<code>[root@localhost scripts]</code><code># ./test.sh</code>

<code>Enter a disk special </code><code>file</code><code>: </code><code>/dev/sda</code>

<code>Disk </code><code>/dev/sda</code><code>: 128.8 GB, 128849018880 bytes</code>

<code>255 heads, 63 sectors</code><code>/track</code><code>, 15665 cylinders</code>

<code>Units = cylinders of 16065 * 512 = 8225280 bytes</code>

<code>Sector size (logical</code><code>/physical</code><code>): 512 bytes / 512 bytes</code>

<code>I</code><code>/O</code> <code>size (minimum</code><code>/optimal</code><code>): 512 bytes / 512 bytes</code>

<code>Disk identifier: 0x000777f3</code>

<code>   </code><code>Device Boot      Start         End      Blocks   Id  System</code>

<code>/dev/sda1</code>   <code>*           1          64      512000   83  Linux</code>

<code>Partition 1 does not end on cylinder boundary.</code>

<code>/dev/sda2</code>              <code>64       12813   102400000   8e  Linux LVM</code>

<code>/dev/sda3</code>           <code>12813       14118    10489811   83  Linux</code>

<code>/dev/sda4</code>           <code>14119       15665    12426277+   5  Extended</code>

<code>/dev/sda5</code>           <code>14119       15424    10490413+  82  Linux swap / Solaris</code>

<code>2、錯誤路徑</code>

<code>Enter a disk special </code><code>file</code><code>: how</code>

<code>No such </code><code>file</code><code>.</code>

<code>[root@localhost scripts]</code><code># echo $?</code>

<code>1</code>

<code>[root@localhost scripts]</code><code>#</code>

<code></code>

本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1955162,如需轉載請自行聯系原作者

繼續閱讀