admin 管理员组

文章数量: 1086019


2024年3月19日发(作者:yarn怎么读)

forin格式

for

无$变量

in

字符串

do

$变量

done

一简单的字符串枚举遍历法,利用forin格式对字符串按空格切份的功能

SERVICES="80

3306"

forx

do

iptables

state

done

in

222511

$SERVICES

-p

-j

tcp--dport

ACCEPT

$x-m-AINPUT

--stateNEW

forvariableinvalues--------字符串数组依次赋值

#!/bin/sh

foriinabc字符串列表ABC

字符串用空格分隔,没有括号,没有逗号,然

后循环将其依次赋给变量i

变量没有$

do

echo"iis$i"

done

[macg@machome~]$

iisa

iisb

iisc

forin里,变量和*不等价

#!/bin/bash

foriin*.h;

do

cat${i}.h

done

[macg@vmtest]$./

cat:*.h.h:Nosuchfileordirectory

$i代表的是整个路径,而不是*.h里的.h前面的部分

改正

#!/bin/bash

foriin*.h

do

cat$i

done

[macg@vmtest]$echohahaha>>1.h

[macg@vmtest]$echoha>>2.h

[macg@vmtest]$./

hahaha

ha

例2:

foriin

/etc/profile.d/*.sh

do

$i

done

$i代表的是

/etc/profile.d/,

/etc/profile.d/,

/etc/profile.d/

forin对(命令行,函数)参数遍历

test()

{

locali

foriin$*;do

echo"iis$i"

done

}

$*是字符串:以"参数1参数2..."形式保存所有参数

$i是变量i的应用表示

[macg@machome~]$1p2p3p4

iisp1

iisp2

iisp3

iisp4

forin语句与通配符*合用,批量处理文件

批量改文件名

[root@vmtesttip]#ls

[root@vmtesttip]#

foriin*.txt

数组,依次循环赋值给i

do

mv"$i""$"

done

[root@vmtesttip]#

*.txt相当于一个字符串

[root@vmtesttip]#ls

.

forin语句与``和$()合用,利用``或$()的将多行合为一行的缺陷,实际是合

为一个字符串数组

foriin$(ls*.txt)

do

echo$i

done

[macg@machome~]$shtest

或者说,利用forin克服``和$()的多行合为一行的缺陷

利用forin自动对字符串按空格遍历的特性,对多个目录遍历

LIST="rootfsusrdatadata2"

fordin$LIST;do

mount/backup/$d

rsync-ax--excludefstab--delete/$d//backup/$d/

umount/backup/$d

done


本文标签: 字符串 空格 参数 没有 合用