当前位置: 首页 > news >正文

上海专业的网站建设公司哪家好西宁市解封最新消息今天

上海专业的网站建设公司哪家好,西宁市解封最新消息今天,永久免费个人域名注册,软件公司招聘最新信息一、select in循环语句的功能 Linux shell脚本编程提供了select in语句#xff0c;这是 Shell 独有的一种循环语句#xff0c;非常适合终端#xff08;Terminal#xff09;这样的交互场景#xff0c;它可以根据用户的设置显示出带编号的菜单#xff0c;用户通过输入不同…一、select in循环语句的功能 Linux shell脚本编程提供了select in语句这是 Shell 独有的一种循环语句非常适合终端Terminal这样的交互场景它可以根据用户的设置显示出带编号的菜单用户通过输入不同的编号就可以选择不同的菜单并执行与菜单对应的功能这是C、C、Java、Python 等编程语言中是没有的。 二、select in循环语句的语法格式 select 变量名 in 值1 [值2 ……值n] do     语句或命令1     [……]     [语句或命令n] done 在do 和 done之间我们可以用if或case语句根据变量名的值执行相应语句或命令实现不同的功能。 三、实例1 我们会询问你喜欢吃哪种水果并显示4个水果选项apple、banana、orrange、peach以及一个退出循环的选项exit 如果你的选择4个水果中的一个将会显示你选择的水果名称 如果你选择了是exit将会看到提示bye并结束循环。 代码如下 echo What is your favourite fruit? select f in apple banana orrange peach exit doif [[ $f exit ]]; thenecho byebreakelseecho You have selected $ffidone 一在zsh中 # csdn edu in ~ [22:32:22]  $ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do; if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple    2) banana   3) orrange  4) peach    5) exit      ?# 1 You have selected apple ?# 4 You have selected peach ?# 5 bye # csdn edu in ~ [22:32:52]  我们可以看到zsh 根据select in循环语句提供的值显示出了五个菜单项 1) apple    2) banana   3) orrange  4) peach    5) exit      每个菜单项前有1个数字。 然后显示提示符 ?# 让我们输入菜单项前的数字来选择相应的菜单项。 我们先输入了1所以显示You have selected apple 接着我们输入4所以显示You have selected peach 最后我们输入5这是退出循环的选项于是我们看到了bye并退回到了命令行状态。 二在bash中 # csdn edu in ~ [22:46:42]  $ bash [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do; if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done bash: syntax error near unexpected token ; [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple 2) banana 3) orrange 4) peach 5) exit #? 1  You have selected apple #? 3 You have selected orrange #? 5 bye [csdn ~]$  我们可以看到bash 和zsh 对脚本的支持不太一样。 刚才在zsh中执行正常的脚本在bash中执行时出错 bash: syntax error near unexpected token ; 我们把 do 语句后面的; 去掉后脚本可以执行了。 根据select in循环语句提供的值显示出了五个菜单项 我们可以看到bash 像zsh 一样根据select in循环语句提供的值显示出了五个菜单项 1) apple 2) banana 3) orrange 4) peach 5) exit  每个菜单项前有1个数字。 但与zsh的横向显示方式不同bash采用的是纵向显示方式。 然后显示提示符#?  让我们输入菜单项前的数字来选择相应的菜单项。 bash的这个提示符#?  跟zsh显示的提示符字符顺序是相反的zsh显示的提示符字符是?#。 我们先输入了1所以显示You have selected apple 接着我们输入3所以显示You have selected orrange 最后我们输入5这是退出循环的选项于是我们看到了bye并退回到了命令行状态。 四、容错机制测试 在上面的实例1中如果我们输入的字符不属于菜单项前的数字代码会怎么执行呢 一在zsh中 # csdn edu in ~ [23:03:43]  $ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do; if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple    2) banana   3) orrange  4) peach    5) exit      ?# a You have selected  ?# 6 You have selected  ?# 3 You have selected orrange ?# 5  bye # csdn edu in ~ [23:04:12]  $  二在bash中 # csdn edu in ~ [23:04:12]  $ exec bash [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do; if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done bash: syntax error near unexpected token ; [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple 2) banana 3) orrange 4) peach 5) exit #? b You have selected  #? 9 You have selected  #? 3 You have selected orrange #? 5 bye [csdn ~]$  可以看到不管zsh还是bash如果我们输入的字符不属于菜单项前的数字shell并不会进行干预代码仍然会执行并由if语句根据$f的值进行处理。 所以为了实现预期的效果我们需要自己对用户输入的字符的有效性进行检查和处理。 五、如果 传递给 select in 的值超过9个会怎么显示实例2 我们通过下面的代码给select in 传递了36个值来测试。 一 在 zsh中 # csdn edu in ~ [23:14:29]  $ echo What is your favourite fruit?; select f in 1 2 3 4 5 6 7 8  9 a  b c d e f g h i j  k l m n o p q r s t u v w x y z exit; do; if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) 1      3) 3      5) 5      7) 7      9) 9      11) b     13) d     15) f     17) h     19) j     21) l     23) n     25) p     27) r     29) t     31) v     33) x     35) z      2) 2      4) 4      6) 6      8) 8      10) a     12) c     14) e     16) g     18) i     20) k     22) m     24) o     26) q     28) s     30) u     32) w     34) y     36) exit   ?# 1 You have selected 1 ?# 18 You have selected i ?# m You have selected  ?# 36 bye # csdn edu in ~ [23:15:12]  $  这次在zsh也是采用纵向多列的方式来显示菜单。  二在bash中 # csdn edu in ~ [23:15:12]  $ exec bash [csdn ~]$ echo What is your favourite fruit?; select f in 1 2 3 4 5 6 7 8  9 a  b c d e f g h i j  k l m n o p q r s t u v w x y z exit; do if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) 1       3) 3      5) 5      7) 7      9) 9     11) b     13) d     15) f     17) h     19) j     21) l     23) n     25) p     27) r     29) t     31) v     33) x     35) z 2) 2       4) 4      6) 6      8) 8     10) a     12) c     14) e     16) g     18) i     20) k     22) m     24) o     26) q     28) s     30) u     32) w     34) y     36) exit #? 9 You have selected 9 #? 20 You have selected k #? k You have selected  #? 36 bye [csdn ~]$  这次bash显示菜单的方式与zsh一致。 可以看到当传递给 select in 的值超过9个时不管zsh还是bash会以10、11……这种方式给值赋予菜单值。 六、利用数组构建容错机制 一实例3 我们可以先将要传递给select in 的值定义并存储到一个数组a中 再把数组a传递给 select in 当用户输入数值后对用户输入的数值进行判断 如果用户输入的值 数组a的长度 或者 用户输入的值 1那么就显示 bye并退出循环否则显示用户选择的fruit。 # csdn edu in ~ [23:48:42]  $ a(apple banana orrange peach);echo What is your favourite fruit?; select f in $a; do; if [[ $f -gt ${#a[*]} ]] || [[ $f 1 ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple    2) banana   3) orrange  4) peach     ?# 1 You have selected apple ?# 4 You have selected peach ?# 0 bye # csdn edu in ~ [23:48:52]  $  二注意 对于 if [[ $f -gt ${#a[*]} ]] || [[ $f 1 ]]  1.如果 将  $f -gt ${#a[*]} 写成 $f ${#a[*]}代码执行就会出现问题 $f ${#a[*]} $ a(apple banana orrange peach);echo What is your favourite fruit?; select f in $a; do; if [[ $f ${#a[*]} ]] || [[ $f 1 ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple    2) banana   3) orrange  4) peach     ?# 1 bye # csdn edu in ~ [23:13:38]  $  即使我们输入1代码也会显示bye并跳出循环返回命令行。 这是因为$f 和 ${#a[*]} 在这里进行的是字符串比较。 2.如果将 $f 1 写为 $f -lt 1代码执行也会出现问题 # csdn edu in ~ [23:48:31]  $ a(apple banana orrange peach);echo What is your favourite fruit?; select f in $a; do; if [[ $f -gt ${#a[*]} ]] || [[ $f -lt 1 ]]; then echo bye; break; else echo You have selected $f; fi; done  What is your favourite fruit? 1) apple    2) banana   3) orrange  4) peach     ?# 1 bye 同样我们输入1代码也会显示bye并跳出循环返回命令行。 这是因为$f 和1在进行的是数值比较。 七、如果没有设置退出值菜单项如何退出循环 在上面的实例1和实例2中我们都设置了exit值给用户选择退出循环如果我们在脚本中没有作这方面的设置用户该如何退出循环呢 有两种方法 CtrlC 或 CtrlD 一以bash中用CtrlC # csdn edu in ~ [23:26:14]  $ exec bash [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do; if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done bash: syntax error near unexpected token ; [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple 2) banana 3) orrange 4) peach 5) exit #? 3 You have selected orrange #? ^C 按CtrlC退出屏幕上会显示^C。 二以bash中用CtrlD [csdn ~]$ echo What is your favourite fruit?; select f in apple banana  orrange peach exit; do if [[ $f exit ]]; then echo bye; break; else echo You have selected $f; fi; done What is your favourite fruit? 1) apple 2) banana 3) orrange 4) peach 5) exit #? 1 You have selected apple #?  [csdn ~]$  按CtrlD退出屏幕上不会显示出来更美观一些。  八、与 case...esac语句配合使用 当我们需要对多个数值分别做不同的处置时用if语句太麻烦了我们可以使用case...esca语句配合使用。 我们将实例1修改如下 a(apple banana orrange peach) echo What is your favourite fruit? select f in ${a[*]} docase $f inapple) echo 1 apple;;banana) echo 2 banana;;orrange) echo 3 orrange;;peach) echo 4 peach;;*) echo byebreak;;esac done 使用case...esca语句来对用户选择的fruit进行分别处理如果用户输入的值不在数组a中将显示bye并退出循环。 一在zsh中顺利执行 # csdn edu in ~ [22:37:41]  $ a(apple banana orrange peach);echo What is your favourite fruit?; select f in $a; do; case $f in; apple) echo 1 apple;; banana) echo 2 banana;; orrange)  echo 3 orrange;;peach) echo 4 peach;; *)echo bye;  break; esac; done What is your favourite fruit? 1) apple    2) banana   3) orrange  4) peach     ?# 1 1 apple ?# 4 4 peach ?# 5 bye # csdn edu in ~ [22:37:53]  $  二在bash中 1.命令行执行出错 [csdn ~]$ a(apple banana orrange peach);echo What is your favourite fruit?; select f in $a; do; case $f in; apple) echo 1 apple;; banana) echo 2 banana;; orrange) echo 3 orrange;;peach) echo 4 peach;; *)echo bye;  break; esac; done bash: syntax error near unexpected token ; [csdn ~]$ a(apple banana orrange peach);echo What is your favourite fruit?; select f in $a; do case $f in; apple) echo 1 apple;; banana) echo 2 banana;; orrange) echo 3 orrange;;peach) echo 4 peach;; *)echo bye;  break; esac; done bash: syntax error near unexpected token ; [csdn ~]$  bash对;的处理  2.创建脚本文件来测试 1创建脚本文件a.sh [csdn ~]$ echo a(apple banana orrange peach) a.sh [csdn ~]$ echo echo What is your favourite fruit? a.sh [csdn ~]$ echo select f in ${a[*]} a.sh [csdn ~]$ echo do a.sh [csdn ~]$ echo case $f in a.sh [csdn ~]$ echo apple) echo 1 apple;; a.sh [csdn ~]$ echo banana) echo 2 banana;; a.sh [csdn ~]$ echo orrange) echo 3 orrange;; a.sh [csdn ~]$ echo peach) echo 4 peach;; a.sh [csdn ~]$ echo *) echo bye a.sh [csdn ~]$ echo break;; a.sh [csdn ~]$ echo esac a.sh [csdn ~]$ echo done a.sh [csdn ~]$  \ 2查看脚本文件a.sh的内容 [csdn ~]$ cat a.sh a(apple banana orrange peach) echo What is your favourite fruit? select f in ${a[*]} do case $f in apple) echo 1 apple;; banana) echo 2 banana;; orrange) echo 3 orrange;; peach) echo 4 peach;; *) echo bye break;; esac done [csdn ~]$  (3)执行脚本文件a.sh [csdn ~]$ . a.sh What is your favourite fruit? 1) apple 2) banana 3) orrange 4) peach #? 1 1 apple #? 3 3 orrange #? 5 bye [csdn ~]$  注意 对于数组a(apple banana orrange peach) 在zsh中只需要使用$a 就可以获得所有元素的值在bash中使用$a 只能获得第1个元素的值要获得所有元素的值需要使用${a[*]}或${a[]}
http://www.sczhlp.com/news/180322/

相关文章:

  • 家具网站php源码镇江微信推广平台
  • 设计网站定制公司全国住房和城乡建设部网站
  • 公司网站建设的请示网上服务办事大厅
  • 查询网站用什么做的想学电商运营在哪里学
  • 做买衣服的网站网络广告营销方案
  • 北京网站制作南昌seo怎么读
  • 分类目录网站做排名品牌营销策划案例ppt
  • 网站空间商排名国外的域名注册网站哪个好
  • 给别人做网站百度指数查询入口
  • 模板网站有什么不好自己做图网站
  • 3g下订单的网站怎么做ngrok 群晖wordpress
  • 做网站和程序员哪个好点推广普通话周是每年9月的第几周
  • 柳州做网站去哪家公司好手机app应用开发软件
  • 新网站百度收录要几天在大网站做网页广告需要多少钱
  • 南京网站优化台州做网站公司
  • 黑龙江做网站公司北京网站开发公司大全
  • 设计个网站多少钱通过云主机建设网站
  • 251009
  • Mybatis笔记
  • 雪落 - L
  • php框架做网站花店网站建设目的
  • 宝安中心客运站龙华住房和建设局网站官网
  • 做家装的网站好大青海网app
  • 网站型建设模板360网页游戏
  • 不会代码可以做网站维护吗企业信息
  • 凡诺网站下载锦州市做网站
  • 上海远程教育网站设计与开发公司北京优化seo排名优化
  • 西安网站手机网站建设网络推广深圳有效渠道
  • 学做网站用谁的书wordpress tag搜索
  • skech做网站交互流程成都设计公司广告