Instruções de eco de programação Shell, métodos de cálculo, instruções de loop e funções

Uma declaração de eco

1.1 Caracteres de escape comumente usados ​​de eco

Echo -n significa saída sem
quebras de linha . Echo -e exibe caracteres de escape e exibe o conteúdo de escape na tela

Caracteres de escape comuns Paráfrase
\ b Depois de escapar, é equivalente a pressionar a tecla backspace (backspace), mas a premissa é que existem caracteres após "\ b"; "\ b" significa excluir o caractere anterior e "\ b \ b" significa excluir os dois primeiros caracteres.
\ c Saída sem quebra de linha. Quando não há caracteres após "\ c", o efeito é equivalente a echo -n; Mas quando ainda há caracteres após "\ c", os caracteres após "\ c" não serão exibidos.
\ n Avanço de linha, os caracteres a serem produzidos começam em uma nova linha de "\ n".
\ v ou \ f Quebra de linha, mas o início da nova linha após a quebra de linha está conectado ao final da linha anterior
\ t Significa inserir a guia, ou seja, a guia horizontal;
\ r O cursor se move para o início da linha, mas não quebra, o que equivale a usar os caracteres após "\ r" para substituir os caracteres do mesmo comprimento antes de "\ r", mas quando não houver nenhum caractere depois de "\ r", aquele antes de "\ r" Os caracteres não serão substituídos
\\ Significa inserir "\" a si mesmo

Exemplo de operação
Insira a descrição da imagem aqui

1.2 Método de cálculo

Existem 4 métodos de cálculo no script de shell

1. i=$(expr 12 \* 5)
2. i=$((12*5))
3. i=$[12*5]
4. let i= 12*5

i++相当于i=$[$i+1]
i--相当于i=$[$i-1]
i+=2相当于i=$[$i+2]

Declaração de dois laços

2.1 para loop

Ao usar uma instrução de loop for, você precisa especificar uma variável e uma lista de valores possíveis e executar a mesma sequência de comandos repetidamente para cada valor diferente até que o valor da variável se esgote e saia completamente do loop. Aqui, a lista de valores é a condição de execução da instrução for, que inclui vários objetos com os mesmos atributos, que precisam ser especificados com antecedência.

2.1.1 para formato de loop

Insira a descrição da imagem aqui

for 变量名 in 取值列表 
do
	命令序列
done

Exemplo: Adicionar usuário e excluir usuário

#!/bin/bash添加用户
ULIST=$(cat /root/user.txt)
for UNAME in $ULIST
do
useradd $UNAME
echo "123456" | passwd --stdin $UNAME &> /dev/null	//把输出信息丢弃
done
#!/bin/bash删除用户
$ULIST=$(cat /root/user.txt)
for UNAME in $ULIST
do
userdel -r $UNAME
[$? -eq 0] && [echo "已删除用户$UNAME"]
done

2.1.2 Interrupção de loop (interromper, continuar)

Por padrão, break salta de um único loop, break 2 salta de dois loops e assim por diante, break n salta de n loops.
continue termina um comando em um loop, mas não termina completamente o loop inteiro

2.1.3 Três métodos de loop for

方法1
[root@localhost ~]#for i in {1..10};do echo $i;done		//按序输出1到10
[root@localhost ~]#for i in {1..10..2};do echo $i;done		//输出1到10,步长为2

方法2
[root@localhost ~]#for i in $(seq 1 10);do echo $i;done		//按序输出1到10
[root@localhost ~]#for i in $(seq 1  2 10);do echo $i;done		//输出1到10,步长为2

方法3
[root@localhost ~]#for ((i=1;i<=10;i++));do echo $i;done

2.2 while loop

Insira a descrição da imagem aqui

while 条件测试操作
do
	命令序列
done

Exemplo: adivinhe o preço da mercadoria

PRICE=$(expr $RANDOM % 1000)
TIMES=0
echo "good's price between 0-999,how much?"
while true
do
	read -p "please input the price you guessed:" INT
	let TIMES++
if [ $INT -eq $PRICE ];then
	echo "You're right.The price is $PRICE"
	echo "You have guessed $TIMES times."
	exit 0
elif [ $INT -gt $PRICE ];then
	echo "Too high!"
else echo "Too low!"
fi
done

2.3 até o loop

Teste uma determinada condição repetidamente e execute-a repetidamente, desde que a condição não seja estabelecida
Insira a descrição da imagem aqui

until 条件测试操作
do
	命令序列
done

Exemplo: acumular de 1

#!/bin/bash
read -p "从1加到几?" num
i=0;s=0
until [ $i -eq $num ]
do
	let "i++";let "s=$s+$i"
done
echo "sum(1...$num)="$s

Três funções

Definição de função

[function] 函数名 ()
{
    
    
	命令序列
	[return x]
}

Funções de chamada

函数名 [参数1] [参数2]

3.1 Valor de retorno da função

Retornar significa sair da função e retornar um valor de saída. O script pode usar ? Variáveis ​​para exibir o valor. Princípios de uso: 1 Obter o valor de retorno assim que a função terminar, porque? As variáveis ​​exibem o valor. Princípios: 1 Obter o valor de retorno quando a função terminar ,Porque? A quantidade de variável mostrada de forma significativa, o valor faz uso do original é : um número de função de uma viga de junção para tomar retorna ao valor , porque como ? A variável retorna apenas o último comando executado status
de saída 2 o código de status de saída deve ser 0-255, além Ao dividir por 256, pegue o restante

db() 
{
    
    
read -p "input:" value
return $[$value * 2]
}
db
echo $?

3.2 Função recursiva

A função recursiva chama a si mesma. Ao analisar a função, você pode pular a chamada de função e então analisar a parte.
Exemplo: percorrer diretórios e arquivos executáveis ​​recursivamente em variáveis ​​de ambiente

#!/bin/bash
//递归函数部分
file_list() {
    
    
for f in $1/*		// $1/*表示取值列表,读取PATH下目录
do
        if [ -d $f ];then		//对$f进行判断,-d表示是否为目录
        echo "$2$f"
        file_list "$f" " $2"		//调用函数自身,把$f下的所有目录和文件作为取值列表,再次进行判断

        elif [ -x $f ];then		//对$f进行判断,-x表示是否为可执行文件
        echo "$2$f"		//输出空格接该文件
        fi
done
}
//主程序部分
IFS=$IFS':'		//IFS字段分隔符,默认包含空格,换行,制表符,加入':'对冒号也可以识别并进行分隔
for folder in $PATH
do
  echo "$folder:"
  file_list "$folder" " "		//调用函数,加入位参1,2
done

3.3 Criação e chamada de biblioteca de funções

Exemplo: biblioteca de funções de adição, subtração, multiplicação e divisão

创建函数库
[root@localhost ~]#vim myfuncs.sh
jiafa() 
{
    
    
echo $[$1+$2]
}

jianfa()
{
    
    
echo $[$1-$2]
}

chengfa()
{
    
    
echo $[$1*$2]
}

chufa()
{
    
    
if [ $2 -ne 0 ];then
echo $[$1/$2]
else 
echo '$2不能为0'
fi
}

//调用函数库
. myfuncs.sh

value1=10
value2=5
result1=`jiafa $value1 $value2`
result2=`jianfa $value1 $value2`
result3=`chengfa $value1 $value2`
result4=`chufa $value1 $value2`
echo "加法结果为$result1"
echo "减法结果为$result2"
echo "乘法结果为$result3"
echo "除法结果为$result4"

Quatro para saída de loop noventa e nove tabuada de multiplicação, diamante

4.1 Tabela de multiplicação

#!/bin/bash
for ((i=1;i<=9;i++))		//外循环控制行数
do
        for ((j=1;j<=i;j++))		//内循环控制列数
        do
                echo -n -e "$i x $j = $((i * j))\t"
        done
        echo -e "\n"
done

Insira a descrição da imagem aqui

4.2 Diamante

#!/bin/bash
#菱形上半部分
for ((i=9;i>=1;i--))            #控制行数
do
  for ((a=1;a<=$i;a++))         #控制第i行第一段输出
  do
  echo -n " "
  done
  for ((b=9;b>=$i;b--))         #控制第i行第二段输出
  do
  echo -n "*"
  done
  for ((c=8;c>=$i;c--))         #控制第i行第三段输出
  do
  echo -n "*"
  done
  echo ""
done

#菱形下半部分
for ((h=2;h<=9;h++))
do
  for ((d=1;d<=$h;d++))
  do
  echo -n " "
  done
 
  for ((e=9;e>=$h;e--))
  do
  echo -n "*"
  done

  for ((f=8;f>=$h;f--))
  do
  echo -n "*"
  done

  echo ""
done

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/cenjeal/article/details/108074560
Recomendado
Clasificación