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."
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:
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[*]}
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
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á elif
o 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 do
colocar
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:
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:
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
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
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:
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.
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
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