免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell 求教
最近访问板块 发新帖
查看: 1551 | 回复: 6
打印 上一主题 下一主题

[系统管理] 求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-08 19:29 |只看该作者 |倒序浏览
本帖最后由 byrand1984 于 2015-11-08 19:31 编辑

小弟请教两个问题:

1.小弟要判断一个文件是否可读、可写

   执行以下这个脚本会弹出提示,line 4: [: too many arguments


#!/bin/bash
filename=/root/passwd
if [ test -w $filename -o test -r $filename ];then
        echo "is ok"
else
        echo "is false"
fi


2.小弟编写一个简单的函数,让用户自行输入字符后执行相对应的命令

   小弟调试脚本发现,如果输入其它字符,比如Y,1。。等其它字符,这个脚本会自动退出

    $n1 ==
  • ,不能用*表示其它字符?

    #!/bin/bash
    s () {
    echo "----------------options---------------"
    echo "d/D Show the diskspace information"
    echo "u/U Show the system information"
    echo "f/F Show the memory information"
    echo "q/Q Quit "
    read -p "please input your select: " n1
    }
    s


    while [[ $n1 == [dDuUfF] || $n1 == [qQ] || $n1 ==
  • ]];
    do

    case $n1 in
    d|D)
    df -h
    ;;
    u|U)
    uname -a
    ;;
    f|F)
    free -m
    ;;
    q|Q)
    exit
    ;;
    *)
    echo "you input incorrect seclect"
    esac
    read -p "please input your select: " n1
    done
  • 论坛徽章:
    0
    2 [报告]
    发表于 2015-11-08 19:33 |只看该作者
    本帖最后由 byrand1984 于 2015-11-08 19:37 编辑

    奇怪,*会被论坛自动换成一个黑点

    while 循环中定义了条件

    如果不是输入dD  fF  uU qQ这些有效字符

    那么$n1 ==
  • 是否可以表示其它字符?

    如果不能用*表示其它字符,那么该用什么表示呢

    还有一个问题

    sed 可以用来删除空行

    如果要删除2至100行中存在的空行,要怎么表达?

    如果是下面这样写空行会被填入d呀

    sed  -i '2,100s/^$/d'  filename
  • 论坛徽章:
    12
    IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
    3 [报告]
    发表于 2015-11-08 20:36 |只看该作者
    1.if [ test -w $filename -o test -r $filename ];  
       []等价于test命令  所以 你里面的test可以去掉

    2.while [[ $n1 == [dDuUfF] || $n1 == [qQ] || $n1 == *]];
       你的脚本里面已经有case进行判断了,你这里不觉得多余么?
       直接改成死循环得了  比如  while :

    3.sed  -i '2,100/^$/d'  filename

    论坛徽章:
    0
    4 [报告]
    发表于 2015-11-08 20:56 |只看该作者
    sync_1521 发表于 2015-11-08 20:36
    1.if [ test -w $filename -o test -r $filename ];  
       []等价于test命令  所以 你里面的test可以去掉
    ...


    小弟照着大侠的指点去掉了test,脚本执行是成功的,但结果有出入,请看

    [root@binzai ~]# ls -l /root/passwd
    -r--r--r--. 1 root root 455 Nov  8 15:37 /root/passwd

    小弟的脚本内容是:

    #!/bin/bash
    filename=/root/passwd
    if [ -w $filename -a  -r $filename ];then
            echo "is ok"
    else
            echo "is false"
    fi

    如果是可读并可写才输出 is ok
    但这个passwd文件它只有读权限呀,这个脚本名称为right

    [root@binzai ~]# sh -x right
    + filename=/root/passwd
    + '[' -w /root/passwd -a -r /root/passwd ']'
    + echo 'is ok'
    is ok


    使用了大虾提供的sed删除空行的记录,没有成功,请看:

    [root@binzai ~]# sed -i '13,22/^$/d' kongge
    sed: -e expression #1, char 6: unknown command: `/'

    论坛徽章:
    12
    IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
    5 [报告]
    发表于 2015-11-08 21:08 |只看该作者
    test -w /root/passwd;echo $? 看下输出

    sed -i '13,22{/^$/d}' kongge 这个刚没测试抱歉

    论坛徽章:
    0
    6 [报告]
    发表于 2015-11-08 21:50 |只看该作者
    sync_1521 发表于 2015-11-08 21:08
    test -w /root/passwd;echo $? 看下输出

    sed -i '13,22{/^$/d}' kongge 这个刚没测试抱歉


    test -w passwd;echo $?
    输出等于0

    小弟搞迷糊了,这个文件只有可读的权限,为什么它的结果是成功的,还请大侠再指点下

    这次sed命令最后达到删除空行的目的了,谢谢大侠

    论坛徽章:
    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
    7 [报告]
    发表于 2015-11-08 22:12 |只看该作者
    回复 6# byrand1984

    因为你是root
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP