bash脚本编程之for循环及应用

循环执行结构:

循环结构包括两个环节;

1.进入循环的条件:

在符合要求或满足条件时才开始循环;

2.退出循环的条件:

达到某个要求或符合某个条件时需要结束或终止循环的执行;

for循环:

1.遍历列表的循环:

为列表中的每个成员执行命令。

for 名称 [in 词语 ... ] ; do 命令; done

建议在脚本中的书写格式:

for VAR_NAME in LIST ; do

循环体

done

for VAR_NAME in LIST

do

循环体

done

注意:

VAR_NAME:任意指定的变量名称,变量的值是从LIST中遍历获取的各个元素;

LIST:for循环需要变量的列表;可以通过以下方式生成列表:

1.直接给出列表;

2.纯整数列表;

1)花括号展开:

[[email protected] ~]# echo {1..10}

1 2 3 4 5 6 7 8 9 10

{FIRST,SECOND,THIRD,...,LAST}

[[email protected] ~]# echo {1,2,3,4,5}

1 2 3 4 5

2)seq命令

seq [OPTION]... LAST  :给出一个数字,默认从1到指定数字,默认是递增顺序;

[[email protected] ~]# seq 5

1

2

3

4

5

seq [OPTION]... FIRST LAST :给出开始的数字,之后递增到指定的数字,默认递增;

[[email protected] ~]# seq 2 5

2

3

4

5

seq [OPTION]... FIRST INCREMENT LAST :给出开始的数字,中间是递增(可正可负)间隔

[[email protected] ~]# seq 2 2 10

2

4

6

8

10

[[email protected] ~]# seq 10 -2 2

10

8

6

4

2

3)花括号展开:

{FIRST...LAST}(字母也可以)

[[email protected] ~]# echo {a..z}

a b c d e f g h i j k l m n o p q r s t u v w x y z

[[email protected] ~]# echo {A..Z}

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

4)命令的执行结果:

ls /etc

grep /PATH/TO/SOMEFILE

5) GLOBBING(通配符)

6)某些特殊变量的值:

$*,[email protected]

循环体:

一般来说,循环体中应该包括能够用到VAR_NAME变量的值的命令或命令的组合;如果循环体中的命令并没有用到VAR_NAME变量的值的话,列表元素个数             就是此次for循环的次数;

例子:

使用for循环写一个脚本,计算1到100的数字之和;

#!/bin/bash

#

declare -i SUM=0

for I in {1..100} ;do

#let SUM+=$I

SUM=$[SUM+I]

done

echo "The summary is: $SUM"

总结奇数的和以及偶数的和:

#!/bin/bash

#

declare -i SUM=0

for I in {1..100..2} ;do

#let SUM+=$I

SUM=$[SUM+I]

done

echo "The summary is: $SUM"

#!/bin/bash

#

declare -i SUM=0

for I in {seq 0 2 100} ;do

#let SUM+=$I

SUM=$[SUM+I]

done

echo "The summary is: $SUM"

写一个脚本,能够通过-a或-d选项添加或删除一个或多个用户:

#!/bin/bash

#

if [ $# -lt 2 ];then

echo "Make sure more than TWO arguments."

exit 6

fi

if [ $1 == '-a' ];then

for I in "[email protected]" ;do

if ! $I &> /dev/null;then

useradd $I &> /dev/null

echo $I | passwd --stdin $I $> /dev/null

echo "User $I created successfully and changed it's password it's username."

else

echo "User $I exists already."

fi

done

elif [ $1 == '-d' ]; then

for J in "[email protected]" ;do

if $J &> /dev/null;then

userdel -r $J &> /dev/null

echo "User $J deleted already."

else

echo "User $J is not exist yet."

fi

done

else

echo "Usage: $(basename $0) {-a UNAME1 [UNAME2 ...] | -d UNAME1 [UNMAE2 ...]}"

exit 5

fi

for循环总结:

1.进入循环的条件:LIST中尚有未被取尽的元素;

2.退出循环的条件:LIST中的元素被取尽;

3.for循环几乎不会出现死循环;

4.在执行循环的过程中,需要将整个LIST载入内存,因此对于大列表来说,可能会消耗较多的内存及CPU资源;

计算指定范围内自然数的和:

#!/bin/bash

#

#declare命令声明SUM初始值为0

declare -i SUM=0

#read命令与用户进行交互

read -p "Please input TWO integer: " I1 I2

#设置两个数I1和I2的值类型

if [[ $I1 =~ [^[:digit:]] ]];then

echo "$I1 must is an integer."

exit 7

fi

if [[ $I2 =~ [^[:digit:]] ]];then

echo "$I2 must is an integer."

exit 7

fi

#利用if选择执行结构和for循环进行嵌套

if [ $I1 -gt $I2 ];then

for I in {seq $I2 $I1} ;do

SUM=$[SUM+I]

done

echo "The summary is: $SUM"

else

for I in {seq $I1 $I2} ;do

SUM=$[SUM+I]

done

echo "The summary is: $SUM"

fi

写一个脚本,打印有“*”组成的倒置的等腰三角形:

*********  1行,0个空白字符,9个*

*******   2行,1个空白字符,7个*

*****    3行,2个空白字符,5个*

***     4行,3个空白字符,3个*

*      5行,4个空白字符,1个*

N行,N-1个空白字符,2*(总行数-当前行号)+1个*

#!/bin/bash

#

if [ $# -ne 1 ];then

echo "Usage: $(basename $0) INTEGER."

exit 5

fi

if [[ $1 =~ [^[:digit:]] ]];then

echo "Usage: $(basename $0) INTEGER."

exit 5

fi

LINENUM=$1

for I in $(seq $LINENUM);do

for J in $(seq $[I-1]) ;do

echo -n " "

done

for K in $(seq $[2*(LINENUM-I)+1]); do

echo -n "*"

done

echo

done

打印九九乘法表:

第一行:1个

第二行:2个

...

第九行:9个

第一种方法:

#!/bin/bash

#

for I in {1..9} ;do

for J in $(seq $I);do

echo -ne "$J x $I = $[I*J]\t"

done

echo

done

第二种方法:

控制变量实现for循环--

#!/bin/bash

#

for (( I=1 ; I<=100 ; I++)) ; do

for (( J=1 ; J<=I ; J++)) ; do

echo -ne "$J x $I = $[I*J]\t"

done

echo

done

以上两个例子,均使用for循环的嵌套;往往需要两层的循环嵌套才能打印出平面效果;外层的for循环,负责控制行数输出;内层的for循环,负责控制每一行中各个列的输出;

2.通过控制变量实现for循环:

for(( exp1; exp2; exp3));do COMMANDS; done

可以在脚本中写成如下格式:

for(( exp1; exp2; exp3));do

COMMANDS

done

exp1:表达式1,为指定的变量赋初始值

exp2:表达式2,此次循环的退出条件

exp3:表达式3,指定的变量的值的变化规律

计算1到100的自然数的和:

#!/bin/bash

#

for (( I=1 ; I<=100 ; I++));do

let SUM+=$I

done

echo "The summary is: $SUM"

时间: 2024-10-09 09:02:51

bash脚本编程之for循环及应用的相关文章

bash脚本编程之if分支结构和位置变量的应用以及交互示例

bash脚本编程的结构: (bash脚本编程语言是脚本类语言.解释型语言.过程式编程语言.) 过程式编程语言的结构: 顺序执行结构(默认): 从上到下,自左而右的执行所有的语句(命令) 选择执行结构: 当条件满足或不满足时,才会执行对于的语句(命令) 循环执行结构: 重复执行某段语句(命令) 在bash脚本编程语言中也具备上述结构: 顺序执行结构:bash默认的执行结构 选择执行结构: 根据给定的条件的逻辑判断结果或根据某个可选取的取值范围进而选择某个分支结构中的语句(命令)予以执行: if:分

菜鸟的Linux之路3 bash脚本编程之二

整数测试及特殊变量     在开始之前我们先介绍一个可以提前结束脚本的命令->exit exit的作用是退出当前进程.退出当前脚本,任何一个命令或者说是任何一个进程执行结束的时候都会有一个执行结果返回值和一个执行状态结果返回值,exit是用来让用户自定义执行状态结果返回值的命令. 命令.脚本或者说是进程的执行状态结果有两种情况: ->正确执行 ->错误执行 而这种状态可以使用exit命令自定义. exit命令使用格式:exit #(0-255) 0值,表示执行正确 1-255的值,均表示

2016-10-3 linux基础学习——脚本编程之while循环/函数

脚本编程控制结构:    顺序    选择        if        case    循环        for        while        until    1.while Command; do    statmentdone    进入循环:条件满足    退出循环:条件不满足 2.until Command; do    statment    ..done 进入循环:条件不满足    退出循环:条件满足    3.for ((expr1; expr2; expr3

bash脚本编程之case语句及脚本选项进阶

case语句及脚本选项进阶详解     面向过程程序设计语言中的控制流(即程序当中的语句)默认是顺序执行的. 程序设计语言的控制结构一共有三类: 1,顺序结构 2,选择结构 (1)if语句 ->单分支的if语句 格式:if condition1;then expression ... fi ->双分支的if语句 格式:if condition1;then expression ... else expression ... fi ->多分支的if语句 格式:if condition1;t

bash脚本编程之在bash脚本中使用选项

[[email protected] ~]# vim a #!/bin/bash # Name:abc # Description:Create script # Author:mylinux # Version:0.0.1 # Datatime:03/02/12 14:42:00 # Usage:mkscript FILENAME cat >$1  <<EOF #!/bin/bash # Name: `basename $1` # Description: # Author: myli

bash脚本编程之(1/4) 变量、变量类型等笔记

Shell编程: 编译器,解释器 编程语言: 机器语言.汇编语言.高级语言 静态语言: 编译型语言 强类型(变量) 事先转换成可执行格式 c\c++\JAVA\c# 动态语言: 解释性语言 弱类型 边解释边执行 asp/asp.net/php/shell/python/perl Shell: 弱类型编程语言 强类型: 变量在使用前,必须事先声明,甚至还需要初始: 弱类型: 变量用时声明,甚至不区分类型: 面向过程: Shell C 面向对象: JAVA Python, perl, c++ 变量:

bash脚本编程之(3/4)条件判断、算符运算、整数测试、文件测试、特殊变量等笔记

Shell编程: 编译器,解释器 编程语言: 机器语言.汇编语言.高级语言 静态语言: 编译型语言 强类型(变量) 事先转换成可执行格式 c\c++\JAVA\c# 动态语言: 解释性语言 弱类型 边解释边执行 asp/asp.net/php/shell/python/perl Shell: 弱类型编程语言 强类型: 变量在使用前,必须事先声明,甚至还需要初始: 弱类型: 变量用时声明,甚至不区分类型: 面向过程: Shell C 面向对象: JAVA Python, perl, c++ 变量:

bash脚本编程之case语句

case语句用于简化复杂的if语句 #!/bin/bash while true; do   read -p "Enter your score:" score   if [ "$score" == "quit" ]; then           exit 0   elif [ $score -lt 60 ]; then           echo "stupid"           break   elif [[ $s

bash脚本编基础

使用多个命令(;): 如果需要两个或多个命令一起执行,用分号把这些命令隔开: #date ; ifconfig eth0 Sat Nov  1 08:47:46 CST 2014 eth0      Link encap:Ethernet  HWaddr 00:50:56:9F:22:36 inet addr:192.168.57.23  Bcast:192.168.57.255  Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe9f:2236/6