Loading... <p><strong><span style="font-size: 18px">一、处理用户输入</span></strong></p> <p> shell中使用read命令来实现与用户的交互输入。</p> <p> 格式:read [options] 变量</p> <p> 常用选项:</p> <p> -p “提示信息”:显示提示信息;</p> <p> -t #:等待用户输入的秒数;</p> <p> -a:输入数组元素。</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161707-71.jpg" title="1451981468898661.jpg" alt="1.jpg" /></p> <p><strong><span style="font-size: 18px">二、生成随机数</span></strong></p> <p> 使用变量RANDOM可以生成随机数,取值范围为0-32768。</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161707-96.jpg" title="1452046450569802.jpg" alt="1.jpg" /></p> <p> 随机数相关的设备文件:/dev/random、/dev/urandom。</p> <p><strong><span style="font-size: 18px">三、输出字体的控制</span></strong></p> <p> shell中可以对输出的字体进行定义,下面的例子中对"hello"的字体进行了编辑。</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161707-75.jpg" title="1452046775293712.jpg" alt="2.jpg" /></p> <p> 格式说明:</p> <p> \033[m\033: 对于字体定义的规定用法;</p> <p> 下面从左到右以分号为分隔符其含义为:</p> <p> 1:字体的形式,如粗体,斜体,下划线等,取值范围1-7;</p> <p> 37:字体本身的颜色;</p> <p> 30:黑色;</p> <p> 31:红色;</p> <p> 32:绿色;</p> <p> 33:黄色;</p> <p> 34:蓝色;</p> <p> 35:洋红;</p> <p> 36:青色;</p> <p> 37:白色;</p> <p> 41:字符的背景色,其中4表示字体背景,下一个数字表示背景颜色取值为1-7;</p> <p> 40:黑色;</p> <p> 41:红色;</p> <p> 42:绿色;</p> <p> 43:黄色;</p> <p> 44:蓝色;</p> <p> 45:洋红;</p> <p> 46:青色;</p> <p> 47:白色;</p> <p> [0m: 表示颜色应用只限于指定字符,如不使用此选项,则下面显示均会带有颜色。</p> <p><strong><span style="font-size: 18px">四、变量相关</span></strong></p> <p> 1、获取变量值的长度</p> <p> 格式:echo ${#变量名}</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-45.jpg" title="1452048144142473.jpg" alt="1.jpg" /></p> <p> 2、变量赋值</p> <p> ${parameter:-word}:如果parameter为空或未定义,则返回为"word";否则,返回parameter的值;</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-96.jpg" title="1452049897757386.jpg" alt="1.jpg" /></p> <p> ${parameter:+word}:如果parameter为空或未定义,则不做任何操作;否则,返回"word";</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-94.jpg" title="1452050055463202.jpg" alt="2.jpg" /></p> <p> ${parameter:=word}:如果parameter为空或未定义,不但返回"word";而且将parameter赋值为"word";</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-37.jpg" title="1452050184809733.jpg" alt="3.jpg" /> </p> <p> ${parameter:?word}:如果parameter为空或未定义,则返回内容为"word"的报错信息,否则返回parameter的值。</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-80.jpg" title="1452050349611832.jpg" alt="4.jpg" /></p> <p> ${parameter:offset:length}:如果将parameter偏移offset个字符,并截取length长度的字符;</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-80-1.jpg" title="1452050415673047.jpg" alt="5.jpg" /></p> <p><strong><span style="font-size: 18px">五、函数中的局部变量</span></strong> </p> <p> 函数中可以定义只在函数内部生效的变量,其作用域只在函数内有效。 </p> <p> 格式:local 变量名=值</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-35.jpg" title="1452050902911718.jpg" alt="1.jpg" /></p> <p> 上例的结果说明了局部变量的作用域只在函数内,再来看下未声明为局部变量的结果:</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-76.jpg" title="1452051398513250.jpg" alt="5.jpg" /></p> <p><span style="font-size: 18px"><strong>六、创建临时文件或目录</strong></span></p> <p> 命令格式:mktemp [options] [template]</p> <p> 常用选项:</p> <p> -d:创建目录;</p> <p> template格式:name.XXX </p> <p> XXX:三个大写x,用于自动生成随机数。</p> <p> eg:mktemptemp.XXX</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-71.jpg" title="1452051926193974.jpg" alt="1.jpg" /></p> <p><strong><span style="font-size: 18px">七、信号</span></strong></p> <p> 1、常用的信号类型:</p> <p> 1:SIGHUP 挂起进程</p> <p> 2:SIGINT 终止进程</p> <p> 9:SIGKILL 强制终止进程</p> <p> 15:SIGTERM 正常终止进程</p> <p> 脚本中能实现信号捕捉,但9和15无法捕捉。</p> <p> 我们常用的ctrl+c快捷键发送的是SIGINT信号。</p> <p> 可以使用kill -l来查看所有的信号。</p> <p> 2、信号捕捉</p> <p> 使用trap命令可以实现信号捕捉,并针对捕捉到的信息指定想要执行的命令。 </p> <p> 命令格式:trap “命令1;命令2” 信号列表</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-40.jpg" title="1452052762261040.jpg" alt="1.jpg" /></p> <p> 上例中当使用Ctrl+c时就会出现"Hi,byeybye"的信息。</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-35-1.jpg" title="1452053169168686.jpg" alt="1.jpg" /></p> <p> 上面这个脚本使用Ctrl+c无法终止,因为信号INT产生的命令为echo "go…";</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-2.jpg" title="1452053294684595.jpg" alt="2.jpg" /></p> <p> trap还可以捕捉到脚本的退出,如下例所示:</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-60.jpg" title="1452059357118717.jpg" alt="1.jpg" /></p> <p> 可以使用单有破折线来移除捕捉命令,格式为:trap – 信号</p> <p style="text-align:center"><img src="//cto.wang/usr/uploads/2016/07/20160703161708-89.jpg" title="1452059708408445.jpg" alt="1.jpg" /></p> <p> 上例中在命令行定义捕捉到INT信号时显示"Hello”,此时只要使用Ctrl+c快捷键就会显示“Hello”,只有在使用了移除命令之后才能恢复默认的信号命令。</p> <p></p> <p></p> <p></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信