loop de concha
One, for loop
(A) para loop
O loop for, também chamado de loop condicional, ou for i in, é na verdade a característica do loop for. O número de vezes e as condições fornecidas são proporcionais à
estrutura da instrução for.
Valores de variáveis diferentes são lidos e usados para executar o mesmo conjunto de comandos um por um.
for 变量名 in 取值列表
do
命令序列
done
Atravessar
for i in {
1..10} 迭代加1 | {
1..10..2} 迭代,每次循环加2
或 $(seq 1 10) | $(seq 1 2 10)
或for ((i=1; i<=10; i++)) | ((i=1; i<=10; i+=2))
do
echo $i
done
#/bin/bash
#1-10
for ((i=1; i<=10; i++)) 或$(seq 1 10)或者for i in {
1..10}
do
echo $i
done
Exemplo 1 (criar usuários em lotes)
1. Crie um arquivo contendo o nome de usuário
2. Escreva o roteiro
#/bin/bash
#passwd
a=$(cat name.txt)
for i in a
do
useradd $i
echo "1234" | passwd --stdin $i
或echo -e "1234\n1234\n" | passwd $i // 或这使用\n代表回车键
done
3. Verificação
Exemplo 2 (testando a conectividade do host)
#!/bin/bash
#ping范围主机
for i in 172.16.100.{
1..20}
do
ping -c 3 -i 0.5 -W 2 $i &> /dev/null
if [ $? = 0 ]
then
echo "$i online"
else
echo "$i offline"
fi
done
Existem várias questões, por exemplo, introduzidas no artigo anteriorlink
Dois, loop while
(1) Primeiro, olhe para o conteúdo dos exemplos de perguntas
Adivinhe o jogo de preços
方法一:不使用break循环
price=$[$RANDOM % 1000]
a=0
times=0
echo "猜猜商品价格是多少"
while [ $a -eq 0 ]
do
let times++
read -p "请输入你猜的价格:" b
if [ $b -eq $price ];then
echo "yes!"
let a++
elif [ $b -gt $price ];then
echo "你猜大了!"
elif [ $b -lt $price ];then
echo "你猜小了!"
fi
done
echo "你总共猜了 $times 次"
方法二:
#!/bin/bash
#猜价格
let a=$RANDOM%1000
b=0
d=0
while yes!
do
read -p "输入价格" c
if [ $c = $a ]
then
echo "yes"
break
elif [ $c -lt $a ]
then
echo "太低了"
else
echo "太高了"
fi
let d++
done
echo "你输入多少次 $d"
(Dois) loop while
Contanto que a condição seja estabelecida, o loop será repetido e parará imediatamente se falhar.
1, estrutura da instrução while
while 条件测试操作
do
命令序列
done
#/bin/bash #/bin/bash
#example #example
i=0 注 i=0
while (( $i <= 10 )) 意 while [ $i -eq 10 ]
do 区 do
echo "$i" 别 let i++
let i++ echo "$i"
done done
O primeiro script exibe o conteúdo de 0-10, o segundo script exibe o conteúdo de 1-11
(Observe a localização da iteração)
(3) Exemplo 2
Adicione 5 usuários começando com stu em lote; stu1 — stu5, senha inicial 1234
#/bin/bash
#useradd
i=0
while [ $i -le 4 ]
do
let i++
useradd stu$i
echo "1234" | passwd --stdin stu$i
done
Três, até (loop anti-while)
(1) até
Teste repetidamente uma determinada condição, desde que a condição não seja estabelecida, repita o loop
1, até a estrutura da instrução
until 条件测试操作
do
命令序列
done
Exibir um número inteiro de 1 a 10
i=1
until [ $i -gt 10 ] //i的值大于等10 不满足i>10的情况下执行循环
do
echo "$i"
let i++
done
(2) Exemplo 1
Calcule a soma de inteiros de 1 a 50
#/bin/bash
#sum 1-50
i=1
sum=0
until [ $i -gt 50 ]
do
sum=$(($sum+$i))
let i++
done
echo "$sum"
Quatro, dois tipos de interrupção (interromper e continuar)
break salta de um único loop; continue aborta um comando em um loop, mas não aborta completamente o comando inteiro
for i in {
1..5}
do
echo "外层循环 $i"
for b in {
1..5}
do
if [ $b -eq 3 ]
then
break //break2则也停止外层循环
fi
echo "内层循环 $b"
done
done
Prosseguir
for i in {
1..5}
do
echo "外层循环 $i"
for b in {
1..5}
do
if [ $b -eq 3 ]
then
continue
fi
echo "内层循环 $b"
done
done
Cinco, conversão comum em personagens
cho -n significa saída sem
quebras de linha . echo -e produz caracteres de escape e exibe o conteúdo de escape na tela.
Os caracteres de escape comumente usados são os seguintes:
- Depois que \ b é escapado, é equivalente a pressionar a tecla backspace (backspace), mas a premissa é que existem caracteres após "\ b"; "\ b" significa deletar o caractere anterior, e "\ b \ b" significa deletar os primeiros dois caracteres
- \ c não quebra a saída. Quando não há caracteres depois de "\ c", é equivalente a echo -n; mas quando ainda há caracteres depois de "\ c", os caracteres depois de "\ c" não serão exibidos
- \ n Nova linha, os caracteres a serem produzidos começam em uma nova linha de "\ n"
- \ f Nova linha, mas o início da nova linha após a nova linha é conectado ao final da linha anterior
- \ v é o mesmo que \ f
- \ t Após a virada, significa inserir uma guia, ou seja, uma guia horizontal
- \ r O cursor se move para o início da linha, mas não quebra, o que é equivalente a usar os caracteres após "\ r" para substituir os caracteres do mesmo comprimento antes de "\ r"; mas quando não há nenhum caractere depois "\ r", "\ r" O caractere anterior não será sobrescrito
- \ Significa inserir "" a si mesmo;
Seis, separador de campo IFS
Contém espaços, tabulações e novas linhas por padrãoconjunto | grep IFS
1.修改
IFS=$'\t\n'
修改成只换行
IFS=$'\n'
IFS=':'
IFS=','
2.备份
IFS. OLD=$IFS
IFS=$'\n'
...
IFS=$IFS.OLD
(1) Exemplos de perguntas
Saída de todos os diretórios contidos na variável de ambiente PATH e todos os arquivos executáveis neles
para
#/bin/bash
OLDIFS=$IFS ///备份IFS参数
IFS=':' ///以:分割的字段输出,这样i就可以按字段取值
for i in $PATH
do
for a in $i/*
do
if [ -x $a -a -f $a ];then
echo "$a 文件有执行权限"
fi
done
done
IFS=$OLDIFS ///还原IFS默认值