[实践OK]for i in 顺序加1输出和倒序减1输出和输出连续IP和PingN次的一行脚本写法,以及解决shell脚本for i in {0..10}输出{0..10}的问题,shell for循环打印1到100的数字,可以导入文本,也可以用awk的NR来输出行号

jackxiang 2010-10-21 13:23 | |
想要在echo语句中使用$(( ))来计算i+1的值的写法,注意是两个点,不是三个点:


for i in 输出连续IP和PingN次的一行脚本写法:




倒序-1输出:



一)shell for循环打印1到100的数字:
for i in {1..100} ;do time curl http://mp.i*v.XX.com/; done


二)解决shell脚本for i in {0..10}输出{0..10}的问题:


输出的却是{0..10}就这么一个字符串。
解决方案:
你执行这段文件用的不是bash,  是debian自己实现的dash(debian系的/bin/sh默认指向/bin/dash)
你可以直接
/bin/bash  example.sh
或者让sha-bang生效
chmod +x example.sh
./example.sh
参考:https://www.oschina.net/question/1047640_156390
https://www.cnblogs.com/xxiong1031/articles/6884381.html
用/bin/sh是不行的,得用/bin/bash,而 FreeBSD里位置不一样,但也行:
/home/irdcops/shell/forinport.jackxiang.com/forinportredis.sh

#./forinportredis.sh    
mkdir /data/redis/6379
mkdir /data/redis/6380
mkdir /data/redis/6381
mkdir /data/redis/6382
mkdir /data/redis/6383
mkdir /data/redis/6384
mkdir /data/redis/6385
chown -R redis /data/redis/6379
chown -R redis /data/redis/6380
chown -R redis /data/redis/6381
chown -R redis /data/redis/6382
chown -R redis /data/redis/6383
chown -R redis /data/redis/6384
chown -R redis /data/redis/6385
/sbin/chkconfig --add redis
/sbin/chkconfig --add redis6380
/sbin/chkconfig --add redis6381
/sbin/chkconfig --add redis6382
/sbin/chkconfig --add redis6383
/sbin/chkconfig --add redis6384
/sbin/chkconfig --add redis6385
/sbin/chkconfig redis on
/sbin/chkconfig redis6380 on
/sbin/chkconfig redis6381 on
/sbin/chkconfig redis6382 on
/sbin/chkconfig redis6383 on
/sbin/chkconfig redis6384 on
/sbin/chkconfig redis6385 on

source ~/.bashrc
alias cforinport='cd /home/irdcops/shell/forinport.jackxiang.com'

三)用cat和awk输出行号:
最简单的用:nl ,nl命令可以用来给文件添加行号,然后再通过重定向将结果保存到一个新的文件中:
在nl命令中,默认情况下,行号与正文行之间是通过制表符(tab)进行分隔的。
在nl命令中使用-s选项来指定行号与正文行之间的分隔符。例如,如果你想要使用空格作为分隔符,可以这样使用:
通过-s选项,我们将分隔符从默认的制表符更改为了空格:   nl -s' ' input.txt

1package main

2import (
3  "flag"
4  "os

cat用 cat -n xxx.txt,就能输出行号。
AWK打印行号的实现:
cat /etc/resolv.conf|awk '{print NR $0}'
cat /etc/resolv.conf|awk 'BEGIN{i=1}{print i$0;i++}'
awk给shell赋值:
#!/bin/sh
var=$(awk '{print $1}' tmp.txt)
echo $var
注意:var= 后面没有空格;
注意下面: i=$(($i+1)),和awk一样的赋值方式!


i=1
while(( $i<100 ))
do
echo $i
i=$(($i+1))
done


AWK的NR用法,打印0-->999的行号,注意:NR-1了,否则是:1--》1000:
cat anta_Tbl_User.txt |awk '{print $0NR-1" "$0NR-1}'  > anta_Tbl_User_**.sql


for 2:

for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done


for 3:
for(( i=1;i<100;i++ ))
do
if((i%3==0))
then
echo $i
continue
fi
done


输出行号:

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3662/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2023-11-15 09:28
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]