天天看点

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,如需转载请自行联系原作者

继续阅读