shell脚本循环语句,怎么用shell实现,如果用户输入的不是yesno,就继续提示让用户输入yesno ??? 不是Expect。
shell脚本循环语句,怎么用shell实现,如果用户输入的不是yesno,就继续提示让用户输入yesno ??? 不是Expect。详细介绍
本文目录一览: 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的过程中的一部分总结,和大家共享。同时,也参考了其他人的博客,在参考列表中列出来了。
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脚本while用法
while? do? 循环是shell中比较简单的一种循环用法,它的构成是这样的
while? 条件
do
执行语句
done
先来一个简单的小例子—累加
再来一个比较有意思的例子,实现一个加法计算器的功能
结果为
这个脚本中有个命令——read命令,它的作用是读取我们从键盘上输入的信息,详细的用法在下一章当中讲解。
shell脚本中使用for.do循环语句列出从1到100的数字中能够被3整除的数求出他们的和并输出文件命名为sum.sh
#!/bin/bashsum=0for i in {1..100}do if [ $(( $i % 3 )) -eq 0 ] then echo $i sum=$(( $sum + $i )) fidoneecho "sum is: $sum"保存为sum.sh
shell编程中while ture和while :为什么等同?
shell编程中while true与while :确实等同。类似于C语言中的 while (1),用于构造无穷循环。
在shell编程中经常用到循环,常用的循环有for和while循环两种。while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别。
一、常用语法
1、for循环
for循环常用的语法结构有如下几种:
for 变量 in seq字符串for 变量 in `command` " "for 变量 in "$@"或“$*”for((赋值;条件;运算语句))
2、while循环
while循环常用的语法结构有如下几种:
二、行读取示例
这里以常见的df获取磁盘信息为例,了解下使用for和while的几种循环方法处理时的区别。先看下我写的脚本,内容如下:
上面的脚本执行时结果如下:
可以看到,只有后面两种方法可以正常获取到我们想要的数据,前面两种方法在处理时和我们想要的结果都不一样。此示例得出的结果为:
1、while循环: 以行读取文件,默认分隔符是空格或者Tab;
2、for循环: 以空格读取文件,也就是碰到空格,就开始执行循环体,所以需要以行读取的话,就要把空格转换成其他字符。
三、ssh连接与wait
这里还是以一个测试脚本为例:
此示例的结果这里不再输出,具体可以使用该脚本ssh几台主机做个测试,测试后得到结果如下:
1、for循环: 循环体在后台执行,等待循环体全部执行结束,后面的命令接着执行。
2、while循环: wait没起到作用,循环体在后台执行,后面的命令也同时在执行。循环体内有ssh、scp、sshpass的时候有执行一次循环就退出的情况,解决该问题方法有如下两种:
a、使用ssh -n "command" ;b、将while循环内加入null重定向,如 ssh "cmd" < /dev/null 将ssh 的输入重定向输入。
如何用shell写死循环
while :do echo 123456done
或者你也可以用for语句和do...while语句来实现,这里就不说了!
可是怎么在shell脚本中写死循环呢?
对于对shell不怎么熟悉的猿人来说,相信这个问题肯定难倒过大家,反正这个问题曾经难住了我......
上网google了查阅了一番资料后,我恍然大悟了!原来可以这么写:
------------------------------------------------------------------------
while [ "1" = "1" ]
do
# do something
done
------------------------------------------------------------------------
或者
------------------------------------------------------------------------
while test "1" = "1"
do
# do something
done
android 的shell中如何使用while和for,我需要实现100次循环dd命令。
你这种for loop语句适用于bash,在android默认sh中是会报语法错误的。
脚本:
#!/system/bin/bash
for ((i=1;i<100;i++)
do
循环体语句
done
android中的sh不支持“((",expr,这些,要用
i=$(($1-1))
#!/system/bin/sh
i=100
while [ i -gt 0 ]
do
echo $i
i=$((i-1))
done
下面是我自己实验的一个只循环十次的结果
root@android:/ # i=10;while [ i -gt 0 ];do echo $i;i=$(($i-1));done
10
9
8
7
6
5
4
3
2
1
while until for switch 哪个不是shell的循环控制结构
linux
shell编程
----
循环结构1
for循环
1
for循环是linux
Shell中常用的结构,for循环有三种结构;一种是列表for循环,第二种是不带列表的for循环,第三种是类C风格的for循环。
2
列表for循环
for
variable
in
list
do
statement
done
3
不带列表for循环
for
variable
do
statement
done
4
类C风格的for循环
for
((
expr1;
expr2;
expr3
))
do
statement
done2
while循环
1
while循环的结构
while
expression
do
statement
done
3
until循环
1
在执行while循环的时候只要expression的退出状态为0,将一直执行循环体。until命令和while命令类似,但区别是until循环中的expression的退出状态不为0的时候循环体将会一直执行。
2
until的结构
untile
expression
do
statement
done
4
循环控制符号
1
break语句可以应用在for,while和until循环语句中,用于强行循环,也就是忽略循环体中任何其它语句和循环条件的限制。
2
continue循环控制符应用在for,while和until语句中,用于让脚本跳过后面的语句,执行下一次的循环。
怎么用shell实现,如果用户输入的不是yesno,就继续提示让用户输入yesno ??? 不是Expect。
1、首先打开linux系统,创建shell脚本文件,如下图所示。
2、然后使用bash解释器,如下图所示。
3、接着使用for语句循环,seq循环10 次,如下图所示。
4、接着创建用户,用i语句接受变量,然后创建用户密码,保存shell脚本,如下图所示。
5、最后修改脚本的权限,运行脚本,创建用户脚本就完成,如下图所示。