shell学习之for循环语句【初学者】

前言:日常系统管理工作中有大量需要重复运行的指令,shell编程提供了for、while、until、select循环语句以实现特定指令的反复执行功能,在所有的循环语句中,变量必须要有初始值,每次运行命令序列前都需要对条件进行过滤,满足条件才会运行命令,否则不执行相关操作。下面介绍的就是for循环语句的两种语法格式。

for 循环每次处理依次列表内信息,直至循环耗尽。相对于while、until的循环方式是必须符合某个条件的状态,for这种语法是已经知道要进行几次循环的状态。

语法格式1

for 变量 in 值1  值2  值3....

do

   执行程序

done

说明:for语句通过对变量的定义取值决定循环的执行次数,根据变量赋值的次数,for循环内的指令将被执行相同的次数,如定义一个变量i取值为2、3、4,则最终for循环将循环执行命令三次。for语句的语法格式1对变量的赋值通过在in后面直接赋值,多个赋值通过空格隔开。当变量值在列表里,for循环即执行一次所以命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。

in列表可以包含替换、字符串和文件名

in列表是可选的,如果不用它,for循环使用命令行的位置参数。

简单for循环例子

例1:按顺序输出列表中的数字:

[[email protected] sh]# vi for1.sh 
[[email protected] sh]# cat for1.sh 
#!/bin/bash
for i in 1 2 3 4 5  ##i是变量,1 2 3 4 5是赋值给变量i
do
echo $i
done
[[email protected] sh]# ./for1.sh   ##执行结果
1
2
3
4
5

也可以在循环体重结合使用变量名跟字符串,如下。

echo "The value is: $i" 
输出结果:
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

例2:打印字符串列表

下面for循环中,列表包含字符串“orange red blue grey”,命令为echo,变量名为loop,

echo命令使用$loop反馈出列表中所有取值,直至列表为空。

[[email protected] sh]# vi forloop.sh 
[[email protected] sh]# cat forloop.sh 
#!/bin/bash
for loop in orange red blue grey  
do
echo $loop
done
[[email protected] sh]# ./forloop.sh   ##执行结果
orange red blue grey
 ##在循环体重结合使用变量名跟字符串

例3:简易批量解压缩脚本(这里脚本替换成批量查询文件数量)

[[email protected] sh]# vi for2.sh 
[[email protected] sh]# cat for2.sh 
#!/bin/bash
cd /mnt/sh/  ##先进入到对应目录下
ls *.sh > ls.log  ##在sh目录下,列出以.sh结尾的所有文件,覆盖到ls.log文件中(这里使用覆盖,而不是追加,是因为还不确定ls.log这个文件是否真实存在,如果有就会影响程序执行,所以使用覆盖)
y=1          ##设置变量y=1
for i in $(cat ls.log)  ##为变量i赋值 cat ls.log的输出结果
do
echo $y   ##输出变量y值,输出一个结果就给y赋值1
y=$(( $y + 1 ))  ##变量y=变量y+1(双小括号,才能进行加减乘除运行算)
done
[[email protected] sh]# ./for2.sh  ##执行结果
1
2
3
4
5
6
7
8
[[email protected] sh]# ls   ##校验执行结果查看有多少.sh结尾的文件
for1.sh  for2.sh  for3.sh  for4.sh  if1.sh  if2.sh  if3.sh  if4.sh  ls.log
[[email protected] sh]#

可以修改为打印当前目录下的所有文件

[[email protected] sh]# cat for5.sh 
#!/bin/bash
for i in `ls `
do
echo $i
done
[ro[email protected] sh]# ./for5.sh 
for1.sh
for2.sh
for3.sh
for4.sh
for5.sh
if1.sh
if2.sh
if3.sh
if4.sh
ls.log

语法格式2:

for (( 初始值;循环控制条件;变量变化))

do

执行程序

done

说明:语法格式2则是首先通过初始化变量的值,也就是定义一个变量的初始值,然后通过运算修改变量的值,当结束循环的条件满足时,for循环结束。

初始值:某个变量在循环前的起始值,直接以类似i=1的方式设置好。

循环控制条件:当变量值在这循环控制范围内就可以继续执行。例如i<=100

变量变化:每做一个循环时变量的变化。例如:i=i+1

值得注意的是,在“变量变化”的设置上,如果每次都加1,可以使用类似“i++”的方式,即i每次循环都会增加1。可以以这种方式来进行1累加到100的循环

例1:从1累加到 100的循环

[[email protected] sh]# vi for3.sh 
[[email protected] sh]# cat for3.sh 
#!/bin/bash
x=0
for (( x=1;x<=100;x=x+1 ))   ##先初始值x=1分号在执行循环控制条件判断x<=100的时候,在执行变量变化x=x+1
do
y=$(($y+$x))    ##变量y就等于 变量y+变量x
done
echo "The sum of 1+2+...+100 is:$y"  ##当x值小于等于100时,输出变量y等于变量y加变量x的结果
[[email protected] sh]# ./for3.sh 
The sum of 1+2+...+100 is:5050   ##执行结果
[[email protected] sh]#

例2:批量添加指定数量的用户(if条件判断与for循环结合使用)

[[email protected] sh]# vi for4.sh 
[[email protected] sh]# cat for4.sh 
#!/bin/bash
read -t 30 -p "input name: " name
read -t 30 -p "input num: " num
read -t 30 -p "input password: " password
 
if [ ! -z $name -a ! -z $num -a ! -z $password ]
then
y=$( echo $num | sed ‘s/^[0-9]*$//g‘ )
if [ -z "$y"]
then
for (( i=1;i<=$num;i=i+1 ))
do
useradd "$name$i" &> /dev/null
echo $password | passwd --stdin "$name$i" &> /dev/null
done
fi
fi
[[email protected] sh]# ./for4.sh  
input name: zhangsan
input num: 5
input password: abc123  
[[email protected] sh]# ls /home  ##去home家目录下查看执行结果,有张三用户说明添加ok
lost+found  zhangsan1  zhangsan2  zhangsan3  zhangsan4  zhangsan5
[[email protected] sh]#

read -t 30指定三十秒读取时间

read -p "input name: " 设置input name: 为读取值时的提示符

!取反

-z如果这个值为空 则返回真。加上!表示:有值才能执行下面语句。

-a 逻辑与(同时判断)

echo $num | sed ‘s/^[0-9]*$//g‘ :输出变量num结果管道符过滤后,用正则sed判断输出的是否是数字,如果是就会把变量结果替换为空。(在实际生活中,如果你是自己批量添加用户的,并没有那么繁琐,还去判断什么输入用户的个数是否是数字的,这块if语句完全可以省略)

-z "$y" :变量y为空,返回真

i=1;i<=$num;i=i+1 参照 i=1;i<=100;i=i+1 解释

useradd "$name$i" &> /dev/null:创建用户自定义变量名+数字,执行结果导入黑洞

echo $password | passwd --stdin "$name$i" &> /dev/null:输入密码管道给自定义变量名+数字的用户,执行结果导入黑洞

附:read命令简单介绍

read命令从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。

语法:read(选项)(参数)

选项:

-p:指定读取值时的提示符

-t:指定读取值时的等待时间(秒)

参数:指定读取值得变量名

时间: 2024-12-25 17:15:04

shell学习之for循环语句【初学者】的相关文章

Linux Shell脚本 几种循环语句创建用户的方法

大家好,我是孤云暮雨,今天给大家带来的是"Linux Shell脚本 几种循环语句创建用户的方法" 添加user1-user20用户 for循环: #!/bin/bash for i in {1..20} do useradd user$i echo "user$i Users to add success" done for循环(C风格): #!/bin/bash for ((i=1;i<=20;i++)) do useradd user$i &&a

shell基础之三:循环语句for

一.循环语句for bash中的循环控制语句:for,while,until for循环语法1: for 变量名 in 列表;do 循环体 done 运行特性: 第一遍:将列表中的第一个元素赋值"变量名"定义的变量,而后执行完成循环体: 第二遍:...直到元素遍历结束,循环退出 列表的生成方式: 1.直接列出  如: stu100 stu101 stu102  或{stu100,stu101,stu102} 2.生成整数列表  如:{start_num..end_num} 例:{1..

L7 linux shell总结以及条件循环语句使用

1.描述shell程序的运行原理(可附带必要的图形说明): shell总结 2.总结shell编程中所涉及到的所有知识点(如:变量.语法.命令状态等等等,要带图的哟): 3.总结课程所讲的所有循环语句.条件判断的使用方法及其相关示例:(if (jpg|png is not exist): echo "You say a XX") 4.写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型:(不要怀疑,就是这么简单) 5.写一个脚本,完成如下功能:判断给定的两个数

shell test 命令、循环语句

test 命令.循环语句 test命令格式: test condition 通常,在if-then-else语句中,用[]代替,即[ condition ].注意,方括号两边都要有空格. 常用命令: -a 两个条件同时成立,返回真值 -o   两个条件成立一个,就返回真值 -n ' '     后面跟字符串 -z 判断字符串是否为0,为空则返回真值 =            判断左边是否等于右边,若相等,返回true !=         判断左边是否等于右边,若相等,返回false -eq  

shell脚本编程之循环语句

在运行脚本时重复执行一系列的命令是很常见的,这时我们就需要使用循环语句来达到这个目的. 一.for命令 格式:for 变量 in 列表:do 循环体 done for命令会遍历列表中的每一个值,并且在遍历完成后退出循环. 列表形式有以下几种: 1.在命令中定义的一系列的值: 2.变量: 3.命令: 4.目录: 5.文件. 实例1: 上例中使用{初始值..结束值}格式来表示一个区间的数值. 实例2:以变量作为列表: 实例3:用命令生成列表: 上例中使用seq命令来生成列表,seq命令的格式为:se

Java基础学习笔记 -- 8(循环语句)

1. 循环结构 循环三要素:A.循环变量初值  B.循环条件(boolean值)  C.循环变量增量(自增或者自减) 1) while循环 语法:while ( boolean表达式 ) { 语句块: } 执行:当while后面的表达式成立,则执行语句块内容,直到boolean表达式为false,不再继续执行. while循环是先判断后执行,有可能一次都不会执行. 案例17: 2) do...while循环 语法:do { 语句块: } while ( boolean表达式 ); 执行:先执行一

python学习:利用循环语句完善输入设置

利用循环语句完善输入设置 使用for循环: 代码1:_user = "alex"_password = "abc123" for i in range(3): username = input("Username:") password = input("Password:") if username == _user and password == _password: print("Welcome %s logi

Python语言学习前提:循环语句

一.循环语句 1.循环语句:允许执行下一个语句或语句组多次 2. 循环类型 3. 循环控制语句 4. while 循环语句 a.while循环语句:在某个条件下,循环执行某段程序,以处理需要重复处理的相同任务 while 判断条件(condition): 执行语句(statements)...... b. continue 和 break 用法 #! /usr/bin/env python i = 1 while i < 10: i +=1 if i%2 >0: #非双数时跳过输出 conti

shell学习之select循环

学习循环,见了很多的for,while,或者until,而select用的比较少,这里是稍微总结下select这个循环. 基本结构: select  VALUE  in  LIST do COMMAND done 而现实出来的结构大概为值前有个数字,选择的那个数字,是$REPLY的值,这里不懂没事,可以继续看下面的程序.$PS3变量相当于shell的默认提示符,默认为空,可以配合select使用. #!/bin/bash #save  $PS3 oPS3=$PS3 PS3="请选择喜欢的水果q退