A função e o tipo de variáveis na programação Shell

1. A função e o tipo de variáveis ​​Shell

O conceito de "variáveis" é usado em vários ambientes Shell. As variáveis ​​de shell são usadas para armazenar parâmetros (valores) específicos que o sistema e os usuários precisam usar, e esses parâmetros podem ser alterados de acordo com as configurações do usuário ou alterações no ambiente do sistema. Ao usar variáveis, o programa Shell pode fornecer funções mais flexíveis e adaptabilidade mais forte.
Os tipos de variáveis ​​de shell comuns incluem variáveis personalizadas, variáveis ​​de ambiente, variáveis ​​somente leitura, variáveis ​​de localização e variáveis ​​predefinidas .

Dois, variáveis ​​personalizadas

Variáveis ​​personalizadas são variáveis ​​definidas pelos próprios usuários do sistema, que só são válidas no ambiente Shell do próprio usuário, portanto, também são chamadas de variáveis ​​locais. Ao escrever um programa de script Shell, algumas variáveis ​​personalizadas específicas são geralmente definidas para se adaptar a várias mudanças durante a execução do programa e atender a diferentes necessidades.

1. Defina novas variáveis

As operações de variáveis ​​no Bash são relativamente simples, não tão complicadas quanto outras linguagens de programação de alto nível (como C / C ++, Java, etc.). Ao definir uma nova variável, geralmente você não precisa declará-la antecipadamente, mas especificar diretamente o nome da variável e atribuí-lo ao valor inicial (conteúdo). O formato básico para definir variáveis ​​é "nome da variável = valor da variável" sem espaços em nenhum dos lados do sinal de igual. O nome da variável deve começar com uma letra ou sublinhado, e o nome não deve conter caracteres especiais (como +, -, *, /,.,?,%, &, #, Etc.).

Por exemplo, se você deseja definir uma variável chamada "Produto" (valor Python) e uma variável chamada "Versão" (valor 2.7.13), você pode fazer o seguinte.

[root@localhost ~]# Product=Python
[root@localhost ~]# Version=2.7.13
2. Visualize e referencie o valor da variável

Ao adicionar o símbolo inicial "$" antes do nome da variável, você pode se referir ao valor de uma variável. Use o comando echo para visualizar variáveis, e você pode visualizar vários valores de variáveis ​​em um comando echo.

[root@localhost ~]# echo $Product
Python
[root@localhost ~]# echo $Product $Version
Python 2.7.13

Quando o nome da variável é facilmente confundido com outros caracteres que o seguem, você precisa adicionar colchetes "{}" para incluí-lo, caso contrário, o nome correto da variável não pode ser determinado. Para variáveis ​​indefinidas, ele mostrará um valor nulo.

[root@localhost ~]# echo $Product2.5	//变量Product2.5 并未定义
.5
[root@localhost ~]# echo ${Product}2.5
Python2.5
3. Operação especial de atribuição de variável

Especificar o conteúdo da variável diretamente após o sinal de igual "=" é a maneira mais básica de atribuir um valor a uma variável. Além disso, existem algumas operações de atribuição especial, que podem atribuir valores a variáveis ​​de forma mais flexível, de modo a ser adequado para várias tarefas de gerenciamento complexas. .
(1) Aspas duplas (") As
aspas duplas desempenham principalmente um papel na delimitação de strings, especialmente quando o conteúdo a ser atribuído contém espaços, deve ser colocado entre aspas duplas; em outros casos, as aspas duplas geralmente podem ser omitidas.

Por exemplo, se você deseja atribuir Python 2.7.13 à variável PYTHON, deve realizar a operação PYTHON = "Python 2.7.13".

[root@localhost ~]# PYTHON=Python 2.7.13 	//错误的赋值
bash: 2.7.13: command not found
[root@localhost ~]# PYTHON="Python 2.7.13"	//正确的赋值
[root@localhost ~]# echo $PYTHON
Python 2.7.13

Dentro do intervalo de aspas duplas, o valor de outras variáveis ​​(referências de variáveis) pode ser cotado usando o símbolo " $ ", de forma que o valor de uma variável existente pode ser chamado diretamente para atribuir uma nova variável.

Por exemplo, execute as seguintes operações para chamar o valor da variável Version e atribuí-lo a uma nova variável PyVersion, o valor final é "Python 2.7.13".

[root@localhost ~]# PyVersion="Python $Version"	//以变量的值进行赋值
[root@localhost ~]# echo $PyVersion
Python 2.7.13

(2) Aspas simples (')
Quando o conteúdo a ser atribuído contém caracteres de significado especial, como $, ", \, etc., deve ser colocado entre aspas simples. No âmbito das aspas simples, os valores de outras variáveis ​​não podem ser colocados entre aspas , Qualquer caractere é tratado como um caractere normal. No entanto, quando a atribuição contém uma aspa simples ('), deve ser precedido pelo símbolo \' para evitar conflito.

[root@localhost ~]# PyVersion='Python $Version'       //$符号不能再引用变量
[root@localhost ~]# echo $PyVersion 	             //原样输出字符串
Python $Version

(3) Backtick (`)
Backtick é usado principalmente para substituição de comandos, permitindo que o resultado de saída da tela da execução de um comando seja atribuído a uma variável. O intervalo delimitado pelo crase deve ser uma linha de comando executável, caso contrário, ocorrerá um erro.

Por exemplo, se quiser encontrar a localização do programa de comando useradd em uma linha de comandos e listar seus atributos detalhados, você pode realizar as seguintes operações.

[root@localhost ~]# ls -lh `which useradd`
-rwxr-x---. 1 root root 101K 8 月 2 2011 /usr/sbin/useradd

A operação acima é equivalente a executar dois comandos consecutivamente - primeiro descubra a localização do programa do comando useradd por meio do comando which useradd e, em seguida, liste os atributos do arquivo de acordo com o resultado da pesquisa. Durante a execução, todo o intervalo de crase será substituído pela saída do comando which useradd.

Para extrair a lista de usuários proibidos de login do serviço vsftpd e atribuí-la à variável DenyList, você pode realizar as seguintes operações.

[root@localhost ~]# DenyList=`grep -v "^#" /etc/vsftpd/ftpusers`
[root@localhost ~]# echo $DenyList
root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody

Deve-se notar que é difícil implementar operações de substituição de comandos aninhados em uma linha de comandos usando apóstrofos reversos. Neste momento, você pode usar " $ () " em vez de apóstrofos posteriores para resolver o problema de aninhamento.

Por exemplo, se quiser consultar a localização do arquivo de configuração instalado pelo pacote de software que fornece o programa de comando useradd, você pode executar as seguintes operações (substituir de dentro para fora).

[root@localhost ~]# rpm -qc $(rpm -qf $(which useradd))
/etc/default/useradd
/etc/login.defs

(4), comando de leitura
Além das operações de atribuição acima, você também pode usar o comando embutido de leitura do Bash para atribuir valores a variáveis. O comando read é usado para solicitar ao usuário a entrada de informações, de modo a realizar um processo de interação simples. Durante a execução, uma linha de conteúdo será lida do dispositivo de entrada padrão (teclado), com espaços como separador, e cada campo lido será atribuído à variável especificada por sua vez (o conteúdo extra é atribuído à última variável). Se houver apenas uma variável especificada, a linha inteira será atribuída a esta variável.
Por exemplo, realizar a operação a seguir esperará que o usuário insira o texto e atribua o conteúdo inserido à variável ToDir1.

[root@localhost ~]# read ToDir1
/opt/backup/	//输入变量ToDir1 的值为/opt/backup/ [root@localhost ~]# echo $ToDir1
/opt/backup/

Para tornar a interface de operação interativa mais amigável e melhorar a facilidade de uso, o comando read pode ser combinado com a opção "-p" para definir informações de prompt para informar ao usuário o que deve ser inserido e outros assuntos relacionados.

Por exemplo, se desejar solicitar ao usuário que insira o diretório de armazenamento do arquivo de backup e atribua as informações de caminho inseridas à variável ToDir2, você pode executar as seguintes operações.

[root@localhost ~]# read -p "请指定备份存放目录:" ToDir2
请指定备份存放目录:/opt/backup
[root@localhost ~]# echo $ToDir2
/opt/backup
4. Defina o escopo da variável

Por padrão, as variáveis ​​recém-definidas são válidas apenas no ambiente Shell atual, portanto, são chamadas de variáveis ​​locais. Ao inserir um subprograma ou um novo ambiente de sub-Shell, as variáveis ​​locais não podem mais ser usadas.

Por exemplo, depois de executar diretamente o Bash para inserir um novo script filho do Shell, não será possível fazer referência ao Produto, Versão e outras variáveis ​​definidas no ambiente pai do Shell.

[root@localhost ~]# echo "$Product $Version"	//查看当前定义的变量值Python 2.7.13
[root@localhost ~]# bash	//进入子Shell 环境
[root@localhost ~]# echo "$Product $Version" //无法调用父Shell 环境中的变量
[root@localhost ~]# exit                    //返回原有的Shell 环境

Para permitir que as variáveis ​​definidas pelo usuário continuem a ser usadas em todos os ambientes do sub-Shell e reduzir as configurações repetidas, as variáveis ​​especificadas podem ser exportadas como variáveis ​​globais por meio do comando interno de exportação. O usuário pode especificar vários nomes de variáveis ​​como parâmetros ao mesmo tempo (sem usar o símbolo "$") e os nomes de variáveis ​​são separados por espaços.

[root@localhost ~]# echo "$Product $Version"	//查看当前定义的变量值Python 2.7.13
[root@localhost ~]# export Product Version	   //将Product、Version 设为全局变量
[root@localhost ~]# bash	                 //进入子Shell 环境
[root@localhost ~]# echo "$Product $Version"
Python 2.7.13	                           //可以调用父Shell 的全局变量
[root@localhost ~]# exit	              //返回原有的Shell 环境

Ao usar exportar para exportar variáveis ​​globais, você também pode atribuir valores a variáveis, portanto, você não precisa atribuir valores com antecedência ao definir variáveis ​​globais.

Por exemplo, execute as seguintes operações para criar diretamente uma nova variável global chamada FQDN.

[root@localhost ~]# export FQDN="www.jb-aptech.com.cn"
[root@localhost ~]# echo $FQDN
www.jb-aptech.com.cn
5. Operação de variáveis ​​numéricas

As operações numéricas de variáveis ​​de shell são usadas principalmente para controle de processo de programas de script (como tempos de ciclo, comparação de uso, etc., que serão introduzidos nos capítulos subsequentes). No ambiente Bash Shell, apenas operações inteiras simples podem ser realizadas, e operações decimais não são suportadas. O cálculo do valor inteiro é realizado principalmente através do comando interno expr, e o formato básico é mostrado abaixo. Observe que deve haver pelo menos um espaço entre o operador e a variável.
expr variável 1 variável de operador 2 [variável de operador 3] ...
Dentre elas, a variável 1, variável 2 ... corresponde à variável numérica que deve ser calculada (precisa ser chamada com o símbolo "$"). Vários operadores comumente usados ​​são descritos abaixo.

  • +: Operação de adição.
  • -: Operação de subtração.
  • *: Operação de multiplicação. Observe que você não pode usar apenas o símbolo "*", caso contrário, ele será considerado um curinga de arquivo.
  • /: Operação de divisão.
  • %: Operação de módulo, também conhecida como operação de resto, usada para calcular o resto após dividir um valor.
    Por exemplo, duas variáveis ​​X (valor 35) e Y (valor 16) são definidas, e os resultados da adição, subtração, multiplicação, divisão e operação do módulo das variáveis ​​X e Y são demonstrados sucessivamente.
[root@localhost ~]# X=35 
[root@localhost ~]# Y=16
 [root@localhost ~]# expr $X + $Y 51
[root@localhost ~]# expr $X - $Y
19
[root@localhost ~]# expr $X \* $Y
560
[root@localhost ~]# expr $X / $Y
2
[root@localhost ~]# expr $X % $Y
3

Se você quiser atribuir o resultado da operação a outras variáveis, pode combinar a operação de substituição de comando (usando o crase).

Por exemplo, calcule a 3ª potência da variável Y e atribua o resultado à variável Ycube.

[root@localhost ~]# Ycube=`expr $Y \* $Y \* $Y`
[root@localhost ~]# echo $Ycube
4096

Três variáveis ​​de shell especiais

Além das variáveis ​​Shell definidas pelo usuário, há também uma série de variáveis ​​especiais no sistema Linux e variáveis ​​de ambiente do Bash Shell , variáveis ​​somente leitura, variáveis ​​de localização e variáveis ​​predefinidas.

1. Variáveis ​​de ambiente

Variáveis ​​de ambiente referem-se a um tipo de variáveis ​​criadas previamente pelo sistema Linux para necessidades operacionais. Elas são usadas principalmente para definir o ambiente de trabalho do usuário, incluindo diretório inicial do usuário, caminho de pesquisa de comando, diretório atual do usuário, terminal de login, etc. Os valores das variáveis ​​de ambiente são mantidos automaticamente pelo sistema Linux e mudam conforme o status do usuário muda. Use o comando env para ver as variáveis ​​de ambiente no ambiente de trabalho atual. Para algumas variáveis ​​de ambiente comuns, você deve entender seus respectivos usos.

Por exemplo, a variável USER representa o nome do usuário, HOME representa o diretório inicial do usuário, LANG representa o idioma e o conjunto de caracteres, PWD representa o diretório de trabalho atual, PATH representa o caminho de pesquisa do comando, etc.

[root@localhost ~]# env	//选取部分内容
XDG_SESSION_ID=135
HOSTNAME=localhost.localdomain 
…… //省略部分内容

A variável PATH é usada para definir o caminho de pesquisa padrão do programa executável. Quando apenas o nome do arquivo é especificado para executar o programa de comando, o sistema Linux irá procurar o arquivo executável correspondente no diretório especificado pela variável PATH. Se não puder encontrá-lo, ele exibirá "comando não encontrado".

Por exemplo, o script first.sh está localizado no diretório / root. Se você deseja executar o script diretamente pelo nome do arquivo, pode modificar a variável PATH para adicionar o caminho de pesquisa ou copiar o script first.sh para uma pasta no caminho de pesquisa existente sob.

[root@localhost ~]# vim frist.sh
#!/bin/bash
#一个简单的Shell脚本        //“#”用于注释的内容
cd/opt/                                    //切换到opt目录
echo "当前位于哪个目录:"    //在屏幕显示“ ....... ”
pwd                                          //查看当前在那个目录中
echo "查看当前目录:"      
ls -lh 
[root@localhost ~]# chmod +x first.sh       //为脚本增加执行权限
[root@localhost ~]# ls -lh /root/first.sh	//确认脚本位置
-rwxr-xr-x. 1 root root 27 Jul 4 09:24 /root/first.sh
[root@localhost ~]# echo $PATH	//查看当前搜索路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin 
[root@localhost ~]# first.sh	//直接执行时找不到命令
-bash: first.sh: command not found
[root@localhost ~]# PATH="$PATH:/root"	//将/root 添加到搜索路径
[root@localhost ~]# echo $PATH	//查看修改后的搜索路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin:/root/bin:/root 
[root@localhost ~]# first.sh	//直接以文件名运行脚本
当前位于哪个目录:
/opt
........... //省略部分内容
2. Variáveis ​​somente leitura

Há um caso especial nas variáveis ​​Shell. Uma vez definidas, seu valor não pode ser alterado. Essas variáveis ​​são chamadas de variáveis ​​somente leitura. Ao criar uma variável, você pode defini-la como um atributo somente leitura ou pode definir uma variável existente como um atributo somente leitura. Variáveis ​​somente leitura são usadas principalmente quando o valor da variável não pode ser modificado.

Por exemplo, uma variável "log_path" é definida no script para definir o caminho do arquivo de log. Se você não quiser ser modificado durante a execução do script, você pode definir esta variável como uma variável somente leitura. Use o comando readonly para definir uma variável como uma variável somente leitura e não pode ser modificada por reatribuição após a definição.

[root@localhost ~]# name=cloud
[root@localhost ~]# readonly name	//设置为只读变量
[root@localhost ~]# echo $name
cloud
[root@localhost ~]# name=yun
-bash: name: readonly variable	//只读变量不可以被重新赋值
[root@localhost ~]# unset name	//只读变量不可以被删除
//上述 unset 命令通常用于删除变量。
-bash: unset: name: cannot unset: readonly variable
3. Variáveis ​​de localização

Para fornecer parâmetros operacionais para o programa por meio da linha de comando ao usar programas de script Shell, Bash introduz o conceito de variáveis ​​posicionais. Ao executar operações de linha de comando, o primeiro campo representa o nome do comando ou programa de script e os parâmetros de string restantes são atribuídos às variáveis ​​posicionais, da esquerda para a direita. Variáveis ​​posicionais também são chamadas de parâmetros posicionais e são representadas por $ 1, $ 2, $ 3, ..., $ 9.

Por exemplo, quando a linha de comando "ls -lh / boot /" é executada, a primeira variável de posição é "-lh", que é representada por "$ 1"; a segunda variável de posição é "/ boot /", que é representada por "$ 2" Disse. O nome do comando "ls -lh / boot /" ou o próprio script é representado por "$ 0". Embora o formato de $ 0 seja igual ao de uma variável posicional, $ 0 é uma variável predefinida em vez de uma variável posicional.

[root@localhost ~]# vim jf.sh     
#!/bin/bash 
SUM=`expr $1 + $2`                //声明脚本算法
echo "$1 + $2 = $SUM"             //打印到屏幕上
[root@localhost ~]# chmod +x jf.sh   //为脚本增加执行权限
[root@localhost ~]# ./jf.sh 12 34	//$1 为 12、$2 为 34 的情况
12 + 34 = 46
[root@localhost ~]# ./jf.sh 56 78	//$1 为 56、$2 为 78 的情况
56 + 78 = 134
4. Variáveis ​​predefinidas

Variáveis ​​predefinidas são um tipo de variáveis ​​especiais predefinidas pelo programa Bash. Os usuários só podem usar variáveis ​​predefinidas, mas não podem criar novas, nem podem atribuir valores diretamente a variáveis ​​predefinidas. As variáveis ​​predefinidas são representadas por uma combinação do símbolo "$" e outro símbolo.Os significados de várias variáveis ​​predefinidas comumente usadas são os seguintes.

  • $ #: Representa o número de parâmetros posicionais na linha de comando.
  • $ *: indica o conteúdo de todos os parâmetros posicionais.
  • $?: Indica o status de retorno após a execução do comando anterior. Um valor de retorno de 0 indica que a execução está correta. Qualquer valor de retorno diferente de 0 indica que a execução é anormal. O uso da variável $? Será introduzido no próximo capítulo.
  • $ 0: representa o nome do script ou programa atualmente em execução.

Para ilustrar a função das variáveis ​​predefinidas, um pequeno script para a operação de backup é escrito abaixo para empacotar e compactar vários arquivos ou diretórios especificados pela linha de comando e informações relacionadas à saída. Entre eles, o carimbo de data / hora UNIX (o número de segundos decorridos desde 1º de janeiro de 1970) está embutido no nome do arquivo compactado recém-criado e é obtido por meio do comando "date +% s".

[root@localhost ~]# vim mybak.sh
#!/bin/bash
TARFILE=beifen-`date +%s`.tgz   //声明变量引用时间戳
tar zcf $TARFILE $* &> /dev/null    /将备份的文件压缩命名
echo "已执行 $0 脚本,"
echo "共完成 $# 个对象的备份" 
echo "具体内容包括: $*"
[root@localhost ~]# chmod +x mybak.sh
[root@localhost ~]# ./mybak.sh /boot/grub       //备份一个对象的情况
已执行 ./mybak.sh 脚本,
共完成 1 个对象的备份
具体包括:/boot/grub
[root@localhost ~]# ./mybak.sh /etc/passwd /etc/shadow     //备份两个对象的情况
已执行 ./mybak.sh 脚本, 
共完成 2 个对象的备份
具体包括:/etc/passwd /etc/shadow
[root@localhost ~]# ls -lh beifen-*	          //确认备份结果
-rw-r--r--. 1 root root 368 Jul 4 09:37 beifen-1499175456.tgz
-rw-r--r--. 1 root root 1.8K Jul 4 09:37 beifen-1499175464.tgz

Acho que você gosta

Origin blog.csdn.net/wulimingde/article/details/108071594
Recomendado
Clasificación