A. 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环境的支持,达到预期的效果,再考虑速度方面的
问题。
B. Linux shell for 循环和双层循环
Shell 脚本一直以来不是很入门,很多时候就是用到再查,发现自己有几个重复用比较高的点,还是记姿腊族录一下,至少查的时候能少费点功夫~~
(1)列表for循环
Shell支持使用略写的计数方式,如{1..10},表示迹弊1到10的整数数字;
Shell还支持安规定的步数进行跳跃的方式实现列表for循环,例如计算1~100之内所有奇数的和。
i 按照2的增量增长,一直到增长到100。局埋即实现100内奇数加和。还可以使用seq命令实现按2递增来计算1..100内的所有奇数之和。 for i in $(seq 1 2 100) ,seq 表示起始值为1,增量为2,结束条件值为100。
for循环除了数字列表,还可以生成字符串行表,如列出当前文件夹下的所有文件:
还可以传递命令行参数
$#表示传递的参数的个数;$@表示参数的列表。
(2) 类C风格的for循环
也称之为计次循环。 切记使用的是双括号。
上面的计算100以内奇数的和可以使用类C的for循环实现
通过for循环实现九九乘法表
C. shell脚本的常用循环
在简单介绍shell脚本(shell script)之前,先简单介绍一下shell。
在计算机科学中, shell (壳层)指“为用户提供用户界面”的软件,通常指的是命令行界面的解析器。一般来说,这个词是指操作系统中,提供访问内核信缓所提供之服务的程序。Shell也用于泛指所有为用户提供操作界面的程序,也就是程序和用户交互的接口。因此与之相对的是程序内核(英语:Kernel),内核不提供和用户的交互功能。
不过这个词也拿来指应用软件,或是任何在特定组件外围的软件,例如浏览器或电子邮件软件是HTML排版引擎的shell。Shell这个词是来自于操作系统(内核)与用户界面的外层界面。
通常将shell分为两类:命令行与图形界面。命令行壳层提供一个命令行界面(CLI);而图形壳层提供一个图形用户界面(GUI)。
shell脚本 (英语:shell script),又称shell命令稿、程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种脚本语言来设计,其运作方式与解释型语言相当,由Unix shell扮演命令行解释器的角色,在读取shell脚本之后,依序运行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,文件操作等。
在Unix及所有的类Unix系统中,如Linux、FreeBSD等操作系统,都存在shell脚本。依照Unix shell的各种不同类型,shell脚本也有各种不同方言,如 Bourne shell (sh), Bourne-Again shell (bash), C shell (csh)等等败猛。在DOS、OS/2、Microsoft Windows中的批处理文件,跟shell脚本有类似的功能。
常见的shell脚本循环语法包括for、while和until。除此之外,还有一些其他语法,能够实现循环(遍历)功能。和循环相关的还有循环控制符break和continue,用于控制流程转向。
for循环属于“当型循环”,即“当满足条件的时候执行”。
for循环有三种类型:
常见的数值for循环语法还有:
for file in $( ls )语法的等效语法有很多,如下:
或者
类C风格的for循环,和C没有太大的区别,这里只进行示例,不再赘述。
或者
结果:
也称为前测试循环语句,重复次数是利用一个条件来控制是否继续重复执行这个语句。为了避免死循环,必须保证循环体中包含循环出口条件即表达式存在退出状态为非0的情况。例如,计算1~100以内所有的奇数之和:
当然,条件可以使字符串,可以是输入值,可以是标记等,此处不再赘述。
until命令和while命令类似,while能实现的功能until也可以实现。但区别是until循环的退出状态是为0(与while刚好相反),即whie循环在条件为真时继续执行循环,而until则在条件为假时执行循环。
例如,计算1~100以内所有的奇数之和:
select结构从技术角度看不能算是循环结构,只是相似而已,它是bash的扩展结构用于交互式菜单显示,功能类似于case结构,但是比case的交互性要好。在遍历列表功能中,select结构可以实现循滑枯模环的功能。
例如,以下选择,只有选择white的时候,退出循环
在循环语法中,经常需要根据条件控制循环退出或跳过本次执行,这时候就需要用到循环控制符。循环控制符主要包括两个:break和continue。
循环控制符和C以及Java等常见语法功能类似,在理不再赘述,只给出常用示例。
在for、while和until循环中break可强行退出循环。
注意 :break语句仅能退出当前的循环,如果是两层循环嵌套,则需要在外层循环中使用break。
例如,计算1~100以内所有的奇数之和:
在for、while和until中用于让脚本跳过其后面的语句,执行下一次循环。
例如,显示10以内能被3整除的正整数。
以上是自己在学习Linux的过程中的一部分总结,和大家共享。同时,也参考了其他人的博客,在参考列表中列出来了。
D. shell for循环读文件,拼接字符串赋值给变量
OPTS="$(cat opt/aaa.ini) "
只需隐毁要这样就是读取所有数据族埋放灶穗备到OPTS
E. shell通过for循环连续赋值
for (( i=1 ; i <纯颂= 3 ; i++ ));do eval account$i=`echo $account |cut -d ' '运裤没旁纳 -f$i` ; done
F. shell中数组怎么循环赋值,急
Bash环境可以这样。
#!/bin/bash
for ((i=1;i<=100;i++))
do
name[$i]=$i
echo ${name[$i]} #为方便检查,加了打印
done
通用顷没点的(符合POSIX标准)可以这样:
#!/bin/sh
declare -a name
for i in `seq 100`
do
name[$i]=$i
echo ${name[$i]} #为和乎缓方便检查,加了打印
done
G. shell中使用for循环对变量赋值出现问题!!!
#!/bin/尺碧bash
for((j=1;j<=5;j++))
do
m=$[80*$j]
echo $m
done
如陵茄举此纳码,即可
H. shell脚本里面for循环一个特殊用法谁知道是怎么用的,如下代码中for var do 这种结构
for var
没有in的 for语句,等于for var in "$@",表示将所有命令行参数依次赋值给宴岁毕变量var,执行for中语句
如果这样调用test函数
test a.txt b.txt
则 for中晌芹$var的值依次雀散是a.txt , b.txt
I. shell脚本for循环
原因:
1. 因为你所处理的文件换行符是dos格式的”
” ;
2. 可以使用cat -v 文件名 来查看换行符是否是,如果是上述的,则行结尾会是^m?需要转换成linux/unix格式的”\n”;
3. 具体转换办法就是转换换行符 。
可以用sed命令处理一下文件,命令如下:?
1. sed ‘s/\r//’ 原文件 >转换后文件 ;
2. sed 命令的参数中 ”代表决定引用参数,不允许参数中的值让shell解释,s代表替换 /后面跟的是被替换的内容,后面的//代表替换后的内容为空 ;
3. 推荐使用EditPlus或者UltraEdit,使用这些文本编辑工具,在保存时,可以选择保存的文字编码类型,比如选择UNIX格式换行符;
4. 我比较喜欢EditPlus的join lines功能,把多行的值变成一个逻辑行,便于写到shell脚本中作为循环的变量。
J. Shell脚本for循环逐行原样输出
我在写Shell脚本时遇到了这样一个问题。
需求册逗颤指慧:从文件中逐行遍历然后输出。
诶?
为什么州败和我源文件的行数不一致呢?
后来查资料发现:
bash shell会将下列字符当作字段分隔符:空格、制表符、换行符
如果我们想忽略掉这些分隔符,需要设IFS的变量值。
在for循环前加上这个IFS赋值操作就可以了
看,现在输出的结果和我们txt文件中的格式是一样的了。
但是这样赋值会有问题,如果脚本中其他方法也用到了for循环,可能影响其他for循环的输出结果,那我们可以用这种方式给IFS赋值