当前位置:首页 » 编程软件 » shell编程for

shell编程for

发布时间: 2023-08-20 09:28:37

‘壹’ Shell脚本中使用变量作为for循环范围

我们知道在shell脚本中,可以通过 {x..y} 这样的表达式来表示一个从x到y的数列

这个用法在shell脚本里叫做 Brace Expansion 。

因此我们常利用这个表达式来作为循环的次数,如:

可以得到从1到10的输出结果。

但是如果我们想输出从1到一个变量的结果,这个变量从其他地方获取:

得到的结果却是

放弃使用 {x..y} 这样的表达式:

seq 命令的原理就不说了,这里说说为什么不能在 { } 中使用变量。其实原因写在bash的man手册中:

Brace expansion is performed before any other expansions, and any characters special to other expansions are preserved in the result. It is strictly textual. Bash does not apply any syntactic interpretation to the context of the expansion or the text between the braces.

大意是说,Bash中会最先展开 { } 中的内容,这个时候 $NUM 还不会被具体的值替代,所以是 i 在循环中读取的是 ‘{1..$NUM}’ 的一个完整的字符串,输出时 $NUM 会被10替代,就有了 '{1..10}' 这样的结果。

关于Bash中的展开 (expansion) 顺序,其实有不少值得注意的地方,一不留神可能就会踩坑,还是老前辈那句:脚本猛于虎。

‘贰’ shell里面的for循环

关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总
结,感觉很全面,所以就转过来研究研究,嘿嘿...
1、 for((i=1;i<=10;i++));do echo $(expr $i \* 4);done
2、在shell中常用的是 for i in $(seq 10)
3、for i in `ls`
4、for i in ${arr[@]}
5、for i in $* ; do
6、for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
7、for i in f1 f2 f3 ;do
8、for i in *.txt
9、for i in $(ls *.txt)
for in语句与` `和$( )合用,利用` `或$( )的将多行合为一行的缺陷,实际是合为一个字符串
数组
============ -_- ==============for num in $(seq 1 100)
10、LIST="rootfs usr data data2"
for d in $LIST; do
用for in语句自动对字符串按空格遍历的特性,对多个目录遍历
11、for i in {1..10}
12、for i in stringchar {1..10}
13、awk 'BEGIN{for(i=1; i<=10; i++) print i}'
注意:AWK中的for循环写法和C语言一样的
===============================================================
01.#/bin/bash
02.# author: 周海汉
03.# date :2010.3.25
04.# blog.csdn.net/ablo_zhou
05.arr=("a" "b" "c")
06.echo "arr is (${arr[@]})"
07.echo "item in array:"
08.for i in ${arr[@]}
09.do
10. echo "$i"
11.done
12.echo "参数,\$*表示脚本输入的所有参数:"
13.for i in $* ; do
14.echo $i
15.done
16.echo
17.echo '处理文件 /proc/sys/net/ipv4/conf/*/accept_redirects:'
18.for File in /proc/sys/net/ipv4/conf/*/accept_redirects; do
19.echo $File
20.done
21.echo "直接指定循环内容"
22.for i in f1 f2 f3 ;do
23.echo $i
24.done
25.echo
26.echo "C 语法for 循环:"
27.for (( i=0; i<10; i++)); do
28.echo $i
29.done
-----------------------------------------------------------------------------------
----------------------
shell中for循环用法
shell语法好麻烦的,一个循环都弄了一会 ,找了几个不同的方法来实现输出1-100间可以被3
整除的数
1.用(())
#!/bin/bash
clear
for((i=1;i<100;i++))
for
do
if((i%3==0))
then
echo $i
continue
fi
done
2.使用`seq 100`
#!/bin/bash
clear
for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done
3.使用while
#!/bin/bash
clear
i=1
while(($i<100))
do
if(($i%3==0))
then
echo $i
fi
i=$(($i+1))
done
-----------------------------------------------------------------------------------
---------------------
在shell用for循环做数字递增的时候发现问题,特列出shell下for循环的几种方法:
1.
for i in `seq 1 1000000`;do
echo $i
done
用seq 1 10000000做递增,之前用这种方法的时候没遇到问题,因为之前的i根本就没用到百万
(1000000),因为项目需要我这个数字远大于百万,发现用seq 数值到 1000000时转换为1e+06,根
本无法作为数字进行其他运算,或者将$i有效、正确的取用,遂求其他方法解决,如下
2.
for((i=1;i<10000000;i++));do
echo $i
done
3.
i=1
while(($i<10000000));do
echo $i
i=`expr $i + 1`
done
因为本方法调用expr故运行速度会比第1,第2种慢不少不过可稍作改进,将i=`expr $i + 1`改
为i=$(($i+1))即可稍作速度的提升,不过具体得看相应shell环境是否支持
4.
for i in {1..10000000;do
echo $i
done
其实选用哪种方法具体还是得由相应的shell环境的支持,达到预期的效果,再考虑速度方面的
问题。

‘叁’ shell脚本怎么写for循环

for
I
in
list;
do
statement
done
I
是变量
list是一个表格
如你可以使用一串用括号括起来的数,
也可以使用
命令替换
`seq
1
15`
这个命令忘记了,,
有可能是
`seq
15`
[1..15]
表示1-15的数,,
statement
即要执行的语句
for
I
in
[1..10];
do
echo
$I
done
这段for循环的含义就是显示从1~10的所有数字

热点内容
安卓高级开发考什么 发布:2025-03-16 11:20:35 浏览:716
揽胜哪个配置带二代地形 发布:2025-03-16 11:16:52 浏览:969
c语言数组存储文件 发布:2025-03-16 11:16:48 浏览:788
sqlserver2016r 发布:2025-03-16 11:15:58 浏览:26
网页登录找不到该服务器什么意思 发布:2025-03-16 11:14:19 浏览:831
网站搭建服务器搭建 发布:2025-03-16 10:33:27 浏览:795
游戏目录在哪里安卓 发布:2025-03-16 10:33:19 浏览:467
婉儿脚本 发布:2025-03-16 10:19:33 浏览:580
c语言ftp下载文件 发布:2025-03-16 10:05:02 浏览:307
手机帐户密码怎么找回密码 发布:2025-03-16 10:02:10 浏览:706