Compartir tecnología

aprendizaje de comando de cambio

2024-07-12

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

aprendizaje de comando de cambio

Enlace de referencia: https://www.cnblogs.com/wjq/p/14863580.html

1. Varias variables especiales de 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

$* y$@ significa que todos los parámetros pasados ​​a la función o script, cuando no están entre comillas dobles (""), están precedidos por "$1"" 2 " … " 2" … " 2""n" para generar todos los parámetros. Pero cuando están entre comillas dobles (""),"$*"tomará todos los parámetros en su conjunto, con "$1 $2... Todos los parámetros se generan en forma de n "; todos los parámetros se generan en forma de " ' n"; "`norte"Genere todos los parámetros en el formulario;"‘@`" separará cada parámetro con "$1", " 2 " 、 … 、 " 2"、…、" 2""n" para generar todos los parámetros.

  • Ejemplo
[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 por turnos

shift El comando se usa para mover parámetros (desplazamiento a la izquierda). Generalmente se usa para recorrer cada parámetro por turno y procesarlo en consecuencia sin conocer la cantidad de parámetros pasados. Se usa comúnmente en los scripts de inicio de varios programas en Linux.

2.1 Mover un parámetro a la vez

  • Ejemplo
#!/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 Mover múltiples parámetros cada vez

El número de parámetros que el comando de cambio mueve a la vez está especificado por los parámetros que lleva.Por ejemplo, ahora hay parámetros $1, $2, $3, ..., $9. Después de que el programa de shell haya procesado los primeros 4 parámetros de la línea de comando (es decir, quedan los siguientes 5 parámetros), puede usarlos.shift 4 El comando mueve $9 a $1.

  • Ejemplo: personalizar el 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 con estuche

introducción del caso

case ..... esac yif ... then ... fi Todas son estructuras de oraciones condicionales. Emparejan palabras en orden inverso con palabras en orden directo, como por ejemplo.if declaración, utilizada al final defi para igualar,esac ycase 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
  • Ejemplo: shift fósforocase ... esac Implementar el procesamiento de parámetros de paso manual del 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