免费注册 查看新帖 |

Chinaunix

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

[文本处理] shell 中for 循环请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-01 14:52 |只看该作者 |倒序浏览
请教大家:现在做一个批量的脚本,遇到点问题,如下:
比较有一个临时test.txt内容(这个临时文件的行数有时只有一行,有时会有多行)。例如:
command1
command2
command3
command4
command5
command6
command7
command8

现在要求写一个for 循环,判断 num=$(CAT text.txt |grep -v ^# |wc -l)
if[ $num -gt 1 ] && [$num -le 3]
then
       echo "command1"
       echo "command2"
       echo "command3"  
elif [ $num >3]
then
       echo "command1"
       echo "command2 and command3"
       echo "command4 and command5"
       echo "command6 and command7"
       echo "command8"
fi

论坛徽章:
0
2 [报告]
发表于 2014-12-01 14:54 |只看该作者
本帖最后由 wdong_2001 于 2014-12-01 14:56 编辑

补充,行数是随机取的,每取一行内容后,另外的脚本会来读,并更新这行值的内容,会在这行前加一个#注释,以做区别

论坛徽章:
0
3 [报告]
发表于 2014-12-01 15:01 |只看该作者
说清楚点,临时文件里是一些命令,判断,如果只是1-3行,就一行一行来执行;如果是大于3行,第一次是执行一行,第二次是执行二行,剩下的小于1的话(大于2,则先执行两行,再统计),直接执行;如果行数多的话,也是一样的规则

论坛徽章:
0
4 [报告]
发表于 2014-12-01 16:32 |只看该作者
本帖最后由 wdong_2001 于 2014-12-01 16:37 编辑

刚刚写了一个for循环来做测试
#!/bin/bash
#Filename : test.sh

#init
#first deploy command
function one_command_deploy()
{
first_count=$(cat test.txt|grep -v ^# |wc -l)
if [[ ${first_count} -gt 0 ]]
then
        cat test.txt|grep -v ^# |head -1 >${tmp_one_command}
        one_command=$(cat ${tmp_one_command}|grep -v ^#)
        echo "one command=${one_command}"
        echo "${one_command}"
        update ${one_command}
fi
}

function update()
{
command=$1
if [[ -f test.txt ]]
then
        sed -i "/#/b; s@${command}@#${command}@" test.txt &&  uniq test.txt temp && mv temp test.txt
fi
}

#two deploy command
function two_command_deploy()
{
num=$(cat test.txt|grep -v ^# |wc -l)
echo "num=$num"
if [[ $num -eq 0 ]]
then
        echo "the num=$num"
             echo "there is no appinfo"
elif [[ $num -le 2 ]]
then
        echo "the num=$num"
        one_command_deploy
#elif [[ $num -gt 2 ]]
#then
else
        cat test.txt|grep -v ^# |head -2>${tmp_two_command}
        for command_info in $(cat ${tmp_two_command} |grep -v ^# )
                do
                two_command=`echo ${command_info} |grep -v ^# |awk '{print $1}'`
                echo "twocommand=${two_command}"
                echo "${two_command}"
                update ${two_command}
                done       
fi
}

#check  loop
function Check_Loop()
{
    local init_Count=0
    local count_num=$(cat test.txt |grep -v ^# |wc -l)
    while [ ${init_Count} -lt ${count_num} ]
    do        
       two_command_deploy

        ((init_Count++));
    done
}

#create temp file
function create_temp()
{
#create temp file
tmp_one_command=$(mktemp /opt/oracle/sor/deploy/batch/Operate_temp/TMP_one_command.XXXXXX)
tmp_two_command=$(mktemp /opt/oracle/sor/deploy/batch/Operate_temp/TMP_two_command.XXXXXX)
}

main()
{
#create temp file
create_temp
#first command deploy
one_command_deploy
#loop deploy
Check_Loop
}

main

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
5 [报告]
发表于 2014-12-01 16:39 |只看该作者
回复 4# wdong_2001


    问题在哪里?

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2014-12-01 16:40 |只看该作者
回复 5# Shell_HAT


    应该是一个成果展示,经验分享。

论坛徽章:
0
7 [报告]
发表于 2014-12-01 17:08 |只看该作者
本帖最后由 wdong_2001 于 2014-12-01 17:10 编辑

真不是,之前发出来是想问的,后来自已想了一下,还是自已写一个得了,可能写的不够全面,还要优化,刚刚还和一个朋友聊了,想写成像 CS那种结构的,中控机和CLIENT功能分开来实施,可能效果会好点

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
8 [报告]
发表于 2014-12-01 17:15 |只看该作者
看的我有点迷糊

论坛徽章:
0
9 [报告]
发表于 2014-12-01 17:27 |只看该作者
现在只是写了一个简单的deamon,实际上功能和逻辑还需要优化

论坛徽章:
0
10 [报告]
发表于 2014-12-02 08:34 |只看该作者
回复 9# wdong_2001
看着你的代码有点复杂,这样不行吗?

  1. #!/bin/bash

  2. a=`grep -v ^# test.txt`
  3. if [ "`wc -l <<<"$a"`" -gt 3 ]; then
  4.         sed '2,${N;s/\n/ and /}'
  5.         exit
  6. fi <<<"$a"
  7. echo "$a"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP