Compartilhamento de tecnologia

aprendizagem de comando de mudança

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

aprendizagem de comando de mudança

Link de referência: https://www.cnblogs.com/wjq/p/14863580.html

1. Várias variáveis ​​especiais do shell

#!/bin/bash
echo "$0:$0"    # 当前脚本的文件名(间接运行时还包括绝对路径)。
echo "$n:$n"    # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。
echo "$#:$#"    # 传递给脚本或函数的参数个数。
echo "$*:$*"    # 传递给脚本或函数的所有参数。
echo "$@:$@"    # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。
echo "$?:$?"    # 上个命令的退出状态,或函数的返回值。
echo "$$:$$"    # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
echo "$_:$_"    # 上一个命令的最后一个参数。
echo "$!:$!"    # 后台运行的最后一个进程的 ID 号。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

$* e$@ significa que todos os parâmetros passados ​​para a função ou script, quando não estão entre aspas duplas (""), são precedidos por "$1"" 2 " … " 2" … " 2""n" para gerar todos os parâmetros. Mas quando eles estão entre aspas duplas (""),"$*"pegará todos os parâmetros como um todo, com "$1 $2 ... Todos os parâmetros são exibidos na forma de n "; todos os parâmetros são exibidos na forma de " ' n"; "`e"Produza todos os parâmetros no formulário;"‘@`" separará cada parâmetro com "$1", " 2 " 、 … 、 " 2"、…、" 2""n" para gerar todos os parâmetros.

  • Exemplo
[root@localhost myself]# sh test.sh A B B D E
$0:test.sh
$n:
$#:5
$*:A B B D E
$@:A B B D E
$?:0
$$:109424
$_:$$:109424
$!:
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2. uso de turnos

shift O comando é usado para mover parâmetros (deslocamento para a esquerda). Geralmente é usado para percorrer cada parâmetro por vez e processá-lo de acordo, sem saber o número de parâmetros passados. É comumente usado nos scripts de inicialização de vários programas no Linux.

2.1 Mova um parâmetro por vez

  • Exemplo
#!/bin/bash
while [ $# != 0 ]
do
    echo -e "参数值为 $1, 参数个数为 $#"
    shift
done

# 每次运行 shift(不带参数的),销毁一个参数(变量的个数($#)减一),后面的参数前移(不管参数之间相隔一个或者多个空格)。
[root@localhost myself]# sh shift1.sh a b c d e
参数值为 a, 参数个数为 5
参数值为 b, 参数个数为 4
参数值为 c, 参数个数为 3
参数值为 d, 参数个数为 2
参数值为 e, 参数个数为 1

# 注意:上述脚本,如果 shift 移动参数变为 2 ,在参数个数为奇数时则会出现死循环,如果是偶数则没问题。
# 脚本示例:
#!/bin/bash
while [ $# != 0 ]
do
    echo -e "参数值为 $1, 参数个数为 $#"
    shift 2		# 这里移动位数变为2
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

2.2 Mova vários parâmetros de cada vez

O número de parâmetros que o comando shift move de uma vez é especificado pelos parâmetros que ele carrega.Por exemplo, agora existem parâmetros $1, $2, $3, ..., $9 Depois que o programa shell tiver processado os primeiros 4 parâmetros de linha de comando (ou seja, os próximos 5 parâmetros restantes), você pode usar.shift 4 O comando move $9 para $1.

  • Exemplo: Personalize o número de parâmetros de turno para cada turno.
#!/bin/bash
while [ $# -gt 5 ]
do
    echo -e "参数值为 $1, 参数个数为 $#"
    shift
done
shift 4
echo -e "参数值为 $1, 参数个数为 $#"


[root@localhost myself]# sh shift2.sh a1 b2 c3 d4 e5 f6 g7 h8 i9
参数值为 a1, 参数个数为 9
参数值为 b2, 参数个数为 8
参数值为 c3, 参数个数为 7
参数值为 d4, 参数个数为 6
参数值为 i9, 参数个数为 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

2.3 Uso com estojo

introdução de caso

case ..... esac eif ... then ... fi Todas são estruturas de sentenças condicionais. Eles usam palavras alfabéticas de ordem reversa e palavras de ordem direta para emparelhá-las, como.if declaração, usada no final dofi para combinar,esac ecase par

case $参数变量 in	# 以关键字 case 作为开始
"变量值1")			# 变量值用双引号括起来,关键字用小括号括起来
    程序段1		# 对应的逻辑
    ;;              # 每个类别结尾使用两个连续的分号来处理
"变量值2")
    程序段2
    ;;
"变量值3")
    程序段3
    ;;
*)                 # 最后一个位置参数值会用*来代替所有其他值
    程序段4
    ;;
esac               # 关键字 esac(case 的反写) 结束
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • Exemplo: shift correspondercase ... esac Implementar processamento manual de parâmetros de passagem de script de shell
#!/bin/bash
while [ -n "$1" ]
do
  case "$1" in
    -a)
        echo "发现 -a 选项"
        ;;
    -b)
        echo "发现 -b 选项"
        echo "-b 选项的参数值是:$2"
        shift
        ;;
    -c)
        echo "发现 -c 选项"
        echo "-c 选项的参数值是:$2"
        shift
        ;;
    *)
        echo "$1 是一个未知选项"
        ;;
  esac
  shift
done

[root@localhost myself]# sh shift3.sh -a -b 200 -c 300 -d 400
发现 -a 选项
发现 -b 选项
-b 选项的参数值是:200
发现 -c 选项
-c 选项的参数值是:300
-d 是一个未知选项
400 是一个未知选项
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32