免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1906 | 回复: 11
打印 上一主题 下一主题

帮我看看这个脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-26 17:04 |只看该作者 |倒序浏览
#!/bin/sh
result=""
dialog --title "This is just a test program." --checklist "Please select:" 20 30 4 1 "a" "off" 2 "b" "off" 3 "c" "off" 4 "d" "off" 2>msg.tmp
#注释,可能某些仁兄那里没有dialog这个东西,这个执行完了之后结果大体是这样的
#如果我选择a和c的话,msg.tmp的内容是:
#"1" "3"
for n in $(cat msg.tmp)
do
    case n in
        "1")     tmp="a";;
        "2")    tmp="b";;
        "3")    tmp="c";;
        "4")    tmp="d";;
        *)    exit 1
    esac
    result="$result $tmp"
    echo $result
done
exit 0
现在我需要输出结果是“a c”忽略引号

首先,谢谢cjaizss 的指点。让我的script如下:
#!/bin/sh
result=""
dialog --title "This is just a test program." --checklist "Please select:" 20 30 4 1 "a" "off" 2 "b" "off" 3 "c" "off" 4 "d" "off" 2>msg.tmp

for n in $(cat msg.tmp|sed 's/"//g')
do
        case "$n" in
                1)         tmp="a";;
                2)        tmp="b";;
                3)        tmp="c";;
                4)        tmp="d";;
                *)        exit 1
        esac
        result="$result $tmp"
        echo $result
done
exit 0

其次,我发现上面是我的失误,忘记给case n in的n加"$n"了,所以,我还得到了如下script,就是麻烦了点,哈哈:
#!/bin/sh
result=""
dialog --title "This is just a test program." --checklist "Please select:" 20 30 4 1 "a" "off" 2 "b" "off" 3 "c" "off" 4 "d" "off" 2>msg.tmp

for n in $(cat msg.tmp)
do
        case "$n" in
                \"1\")         tmp="a";;
                \"2\")        tmp="b";;
                \"3\")        tmp="c";;
                \"4\")        tmp="d";;
                *)        exit 1
        esac
        result="$result $tmp"
        echo $result
done
exit 0

[ 本帖最后由 simble1986 于 2009-2-26 17:34 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2009-02-26 17:08 |只看该作者
for n in $(cat msg.tmp|sed 's/"//g')

论坛徽章:
0
3 [报告]
发表于 2009-02-26 17:09 |只看该作者
看了足足半分钟,没明白

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2009-02-26 17:11 |只看该作者
result=$(LANG=C tr 1-4  a-d <msg.tmp)

论坛徽章:
0
5 [报告]
发表于 2009-02-26 17:12 |只看该作者
原帖由 waker 于 2009-2-26 17:11 发表
result=$(LANG=C tr 1-4  a-d  

这个方法倒是很简单,但感觉有点通用性差。因为我还要继续做后续的处理。
谢谢哦!

论坛徽章:
0
6 [报告]
发表于 2009-02-26 17:18 |只看该作者
原帖由 cjaizss 于 2009-2-26 17:08 发表
for n in $(cat msg.tmp|sed 's/"//g')

恩,就是要这个,呵呵!是我需要的结果!多谢多谢!
可是我看不懂这个sed的意思。
没学过sed呢!教教我,至少先告诉我sed 's/"//g'这段的意思,我当然也知道是删除里面的“"”,给个详细解释!

论坛徽章:
0
7 [报告]
发表于 2009-02-26 17:22 |只看该作者

回复 #6 simble1986 的帖子

就是删了全部的"的意思,

s是sed的命令,格式是s/A/B/,将句子里的第一个A替换成B,加上个g后,"s/A/B/g",就是将句子里所有的A换成B,这里s/"//g,将"换成空值就成了删除

不过,建议去学下sed

[ 本帖最后由 haimming 于 2009-2-26 17:25 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2009-02-26 17:24 |只看该作者
原帖由 haimming 于 2009-2-26 17:22 发表
就是删了全部的"的意思,不过,建议去学下sed

你说的等于没说!
我知道它的意思就是删除"。哎!算了,完了看看sed吧!
都说了是新手了么,这都懒得教!

论坛徽章:
0
9 [报告]
发表于 2009-02-26 17:26 |只看该作者

回复 #8 simble1986 的帖子

刚才打字不小心按了Ctrl+Enter

论坛徽章:
0
10 [报告]
发表于 2009-02-26 17:28 |只看该作者
原帖由 simble1986 于 2009-2-26 17:24 发表

你说的等于没说!
我知道它的意思就是删除"。哎!算了,完了看看sed吧!
都说了是新手了么,这都懒得教!

就是删除“cat msg.tmp”这条命令输出里的“"”,然后再依次读取到n里,没有其他东西可以说了啊…… = =
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP