Introdução à gramática básica do Bash (parte 2)

Introdução à gramática básica do Bash (parte 2)

0X00 Prefácio

Da última vez, falamos sobre matemática bash, e hoje vamos tirar o resto.
Todas são coisas básicas. Espero que você possa apoiar mais. Essa
ainda é uma regra antiga. Deixe-me colocá-la primeiro:
Introdução à Gramática Básica do Bash (Parte 1)

Parâmetros de idioma 0X10 Bash

Sabemos que ao executar algum código C ++ ou java, alguns precisam inserir alguns parâmetros.

Então, há alguma configuração de parâmetro para nosso Bash?

A resposta é sim

Podemos chamar nosso arquivo de script assim:

./variable.sh Parâmetro 1 Parâmetro 2 Parâmetro 3…

Portanto, a questão é como aceitamos isso no código?

Simplesmente além de sua expectativa, haha

  • $ #: Contém o número de parâmetros.
  • $ 0: contém o nome do script que está sendo executado (variable.sh em nosso exemplo).
  • $ 1: contém o primeiro parâmetro.
  • $ 2: contém o segundo parâmetro.
  • $ 8: contém o oitavo parâmetro.
    ... E
    assim por diante.

Aqui está um exemplo:

#! /bin/bash
echo -e "There are $# students.\n"
echo "They are $1,$2 and $3."

Insira a descrição da imagem aqui

Matriz 0X20 da linguagem Bash

O Bash também oferece suporte a matrizes

Podemos declarar a seguinte matriz

array=('value0' 'value1' 'value2')

Se você deseja acessar o conteúdo, também pode acessar diretamente subscrito:

${array[2]}

Mas você precisa prestar atenção:

Como a maioria das linguagens de programação, o índice da matriz no Shell basicamente começa em 0 em vez de 1. > Portanto, o número (subscrito) do primeiro elemento é 0, o subscrito do segundo elemento é 1 e assim por diante.
No entanto, nem todos os subscritos de array de linguagens Shell começam em 0, e muitos subscritos de array de linguagens Shell (como Csh, Tcsh, Zsh, etc.) começam em 1.

 也可以单独给数组的元素赋值,例如:
array[3]='value3'

Exemplos:

#!/bin/bash

array=('value0' 'value1' 'value2')
array[5]='value5'
echo ${array[1]}

Resultado:
Insira a descrição da imagem aqui
você pode ver que uma coisa é diferente do nosso usual:
os números dos elementos da matriz não precisam ser contínuos

Podemos pular alguns números de série

Você também pode exibir todos os valores do elemento na matriz de uma vez, você precisa usar curingas *(asteriscos)

#!/bin/bash

array=('value0' 'value1' 'value2')
array[5]='value5'
echo ${array[*]}

Insira a descrição da imagem aqui

Declaração condicional 0X30 em linguagem Bash

Ok, bem, finalmente chegamos à declaração condicional

Não fale muito, apenas comece a falar

1. Se: a condição mais simples

No Bash, o formato da instrução if é assim:

if [teste condicional]
então
...
fi

以 if 的倒装 fi 作为结束,Bash果然特立独行

**注意!!!**

Os colchetes []nas 条件测试laterais devem ser um espaço. Não pode [test]ser escrito como[ test ]

Temos outra forma de escrever:

if [teste condicional]; então
...
fi

来看一个例子:
#!/bin/bash
# condition.sh
name="Enming"

if [ $name = "Enming" ]
then
   echo "Hello $name !"
fi

Insira a descrição da imagem aqui

Como pode ser visto no exemplo acima, nossa condição if é relativamente fácil de entender, mas também deve ser observado:

Na linguagem Shell, "igual a" é representado por um sinal de igual (=)

2. Caso contrário: desvio condicional

A lógica de if e else é a seguinte:

if [teste condicional]
então
faça isso
então
faça isso
fi

É mais fácil entender por exemplos diretos:

#!/bin/bash

name1="Enming"
name2="Oscar"

if [ $name1 = $name2 ]
then
    echo "You two have the same name !"
else
    echo "You two have different names !"
fi

O resultado não é mais postado, você pode tentar você mesmo

Claro, há elifo uso de

O uso é assim:

if [condição de teste 1]
, em seguida,
fazer as coisas 1
elif [teste de condição 2]
, em seguida,
fazer as coisas 2
elif [teste de condição 3]
, em seguida,
fazer as coisas 3
pessoa
fazer outras coisas
fi

这使用还是简单的,只要稍微有一点编程基础

3. Seleção de condição de caso

O Bash também oferece suporte à seleção de casos.
Não é preciso dizer que você pode entender o que acabou de fazer com um exemplo.

#!/bin/bash

case $1 in
    "Matthew")
        echo "Hello Matthew !"
        ;;
    "Mark")
        echo "Hello Mark !"
        ;;
    "Luke")
        echo "Hello Luke !"
        ;;
    "John")
        echo "Hello John !"
        ;;
    *)
        echo "Sorry, I do not know you."
        ;;
esac

O fim também é esac, hahaha é mágico
e você pode ver o ;;símbolo, que na verdade é equivalente à quebra de C

0X40 instrução de loop de linguagem Bash

Depois que a condição é o loop, as rotinas básicas de aprendizagem da linguagem geral

1. O loop while

A lógica de julgamento de loop de while é assim:

enquanto [teste condicional]
não
fazer algo
feito

Finalmente não é o reverso! Provavelmente elihw parece muito estranho 2333

Claro, você ainda pode docolocar

enquanto [teste condicional];
faça algo
feito

Vejamos um exemplo:

#!/bin/bash

while [ -z $response ] || [ $response != 'yes' ]
do
    read -p 'Say yes : ' response
done

Resultado da execução:
Insira a descrição da imagem aqui
a condição de julgamento do tempo é

  • A resposta está vazia:-z $response
  • A resposta não é igual a 'sim':$response != 'yes'

Em relação às condições de julgamento no bash, irei resolver e colocar o link no final, os alunos interessados ​​podem dar uma olhada

2, até o loop

Sabemos que em linguagens de programação gerais, se houver um loop while, haverá um correspondente do ... while

Bash também é indispensável, mas as palavras-chave são——until

Indica que a instrução é executada primeiro e depois julgada

Por exemplo:

#!/bin/bash

until [ "$response" = 'yes' ]
do
    read -p 'Say yes : ' response
done

O efeito é o mesmo de antes

3. For loops Por
falar em loops, é claro que os loops for são indispensáveis

O loop for do bash é um pouco diferente do C, C ++, etc., mas é um pouco semelhante ao python

A lógica básica é a seguinte:

para a variável in'valor 1''valor 2''valor 3 '…' valor
n'fazer
algo
feito

Vamos dar um exemplo:

#!/bin/bash

for animal in 'dog' 'cat' 'pig'
do
    echo "Animal being analyzed : $animal" 
done

Os resultados são os seguintes:
Insira a descrição da imagem aqui
veja o loop percorrendo as variáveis ​​acima

A lista de valores do loop for não precisa ser definida no código, também podemos usar uma variável, da seguinte maneira:

#!/bin/bash

listfile=`ls`

for file in $listfile
do
    echo "File found : $file" 
done

Backticks são usados ​​aqui, o loop acima irá imprimir os arquivos no diretório atual

Ou use variáveis ​​diretamente:

#!/bin/bash

for file in `ls`
do
    echo "File found : $file"
done

Ok, agora há pessoas fazendo perguntas. Se você quiser especificar o número de loops como um loop for normal, o que você deve fazer?
Ok, veja abaixo:

#!/bin/bash

for i in `seq 1 10`
do
    echo $i
done

Insira a descrição da imagem aqui
Ciclo de impressão 1 a 10

Satisfeito agora

Se você não está satisfeito, olhe novamente

E se eu quiser pular em um loop, como 1 3 5 com intervalos?
também está bem!

#!/bin/bash

for i in `seq 1 2 10`
do
    echo $i
done

Acabado perfeito

0X40 função de linguagem Bash

Finalmente, finalmente chegou à última função parcial.
Acredito que todos já estão cansados, e eu também estou cansado.Finalmente, todos continuem! Vamos direto ao ponto

1. A definição da função

A função do Bash é definida como:

Nome da função () { corpo da função }

ou:

função nome da função { corpo da função }

requer atenção:

Não há parâmetro entre parênteses após o nome da função, que é muito diferente de outras linguagens de programação

Ainda precisamos de exemplos para entender:

#!/bin/bash

print_something () {
    
    
    echo "Hello, I am a function"
}

print_something
print_something

Insira a descrição da imagem aqui

2. Transferência de parâmetros

Visto que os parâmetros não podem ser escritos entre parênteses de função, como podemos passar os parâmetros?

Na verdade, enquanto você pode pensar na transferência de parâmetro anterior, você provavelmente sabe

Sim, os parâmetros da transferência de função é $1, $2,$3

Aqui está um exemplo:

#!/bin/bash

print_something () {
    
    
    echo Hello $1
}

print_something Matthew
print_something Mark
print_something Luke
print_something John

Os resultados são os seguintes:
Insira a descrição da imagem aqui

Todos devem entender depois de ler isso, é exatamente o mesmo que eu disse antes

3.
A função do valor de retorno Shell pode retornar um status, que é semelhante a quando um programa ou comando sai, haverá um status de saída, indicando se foi bem sucedido

Função shell para retornar o status, use também a palavra-chave return

exemplo:

#!/bin/bash

print_something () {
    
    
    echo Hello $1
    return 1
}

print_something Luke
print_something John
echo Return value of previous function is $?
  • Linha 5: O status retornado não precisa ser codificado (como 1 no exemplo acima), mas também pode ser uma variável.
  • Linha 10: A variável $? Contém o status de retorno do comando ou função anterior.

Insira a descrição da imagem aqui

Se você realmente deseja que a função retorne um valor (por exemplo, um valor calculado), você também pode usar o resultado do comando.

do seguinte modo:

#!/bin/bash

lines_in_file () {
    
    
    cat $1 | wc -l
}

line_num=$(lines_in_file $1)

echo The file $1 has $line_num lines

Suponha que haja um arquivo test_file, você pode contar o número de linhas nele e retornar
Insira a descrição da imagem aqui

Posfácio 0X50

Tudo bem, tudo bem, finalmente o código acabou!
São apenas algumas coisas básicas, não esperava tanta água.
Claro, também me refiro à coluna do Oscar , que é muito boa! Espere pelo link, você pode conferir ~

O comando e os parâmetros comumente usados ​​no teste de condições do shell também são fornecidos posteriormente. Aqueles que estiverem interessados ​​podem conferir ~

Então, tchau a todos ~

Relacionado:
Introdução à Gramática Básica do Bash (Parte 1)
Comandos de teste condicional comumente usados ​​e parâmetros de shell
—————————————————————————————— —— ———————————————————
Referência: Linha de Comando do Linux e Enciclopédia de Programação Shell Script

Acho que você gosta

Origin blog.csdn.net/rjszz1314/article/details/104481628
Recomendado
Clasificación