设为首页 收藏本站
查看: 698|回复: 0

shell学习之select循环

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-5-29 08:48:10 | 显示全部楼层 |阅读模式
学习循环,见了很多的for,while,或者until,而select用的比较少,这里是稍微总结下select这个循环。

基本结构:

    select  VALUE  in  LIST

    do

    COMMAND

    done

而现实出来的结构大概为值前有个数字,选择的那个数字,是$REPLY的值,这里不懂没事,可以继续看下面的程序。$PS3变量相当于shell的默认提示符,默认为空,可以配合select使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
#save  $PS3
oPS3=$PS3
PS3="请选择喜欢的水果q退出:"

select fruit in pear apple banana  others  quit
do
        if [ ! -z "$fruit" ] ; then
                [ "$fruit" == "quit" ] && exit 0 || echo "you choosed $REPLY and you like $fruit"
        else   
                        echo "wrong argv $REPLY"
        fi
done
#restore $PS3
PS3=$oPS3



执行结果
1
2
3
4
5
6
7
8
9
10
11
[iyunv@www shell]# ./select.sh
1) pear
2) apple
3) banana
4) others
5) quit
请选择喜欢的水果q退出:1
you choosed 1 and you like pear
请选择喜欢的水果q退出:6
wrong argv 6
请选择喜欢的水果q退出:5



再写个程序,顺便说一下常用的字符串到数字运算,自己写的,有点蹩脚,这个程序要注意有的地方不能有空格比如let,而expr则必须有空格,为了保险,我使用了单引号

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
35
36
37
38
39
40
#!/bin/bash
#save PS3
oPS3=$PS3
PS3="choose the way:"

function way1 (){
echo "you are using () to add"
tmp1=$((nu1 + nu2))
echo "value is $tmp1"
}
function way2(){
echo "you are using expr to add"
echo "value is `expr ${nu1} + ${nu2}`"
}
function way3(){
echo "you are using let to add"
let tmp2=${nu1}+${nu2}
echo "value is $tmp2"

}

read -p "please input two to test:" nu1 nu2
select cal in '(())' 'expr' 'let' 'q'
do
        case $cal in
        '(())')
                way1;;
        'expr')
                way2;;
        'let')
                way3;;
        'q')
                exit 0;;
        * )
                echo "wrong argv";;
        esac
done

#restore PS3
PS3=$oPS3



执行结果为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[iyunv@www shell]# ./select2.sh
please input two to test:2 3
1) (())
2) expr
3) let
4) q
choose the way:3
you are using let to add
value is 5
choose the way:1
you are using () to add
value is 5
choose the way:2
you are using expr to add
value is 5
choose the way:4



和本次无关
突然想写这样一个脚本
对每一个非系统用户说声hello,用户名,i know you are form 用户组名
我的思路就是shell不能是/sbin/nologin,家目录不能为/sbin我的文件时这样子的
好吧,我承认这个更蹩脚,改天看下详细的awk命令

1
2
3
4
5
#!/bin/bash
#change ps2
tmp=`cat /etc/passwd`

cat /etc/passwd 2>/dev/null|grep -v /sbin/nologin|grep -v /sbin|awk -F ":" '{print "hello,"$1",i know you are from "$5"."}'



执行结果为:
1
2
3
[iyunv@www shell]# ./while.sh
hello,root,i know you are from root.
hello,liuliancao,i know you are from liuliancao.



改天学了awk再修改下吧



这里有个书上写的关于变量书写的tips:

简写如下
a)常数,字符串,文件名建议大写
b)数字等数据变量建议小写
c)命名本质没有好坏之分,重要的是始终保持一种风格,好像这点我得继续努力...


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71702-1-1.html 上篇帖子: [Powershell] FTP Download File 下篇帖子: Powershell 邮件通知计划任务运行失败
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表