내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
참고 링크: https://www.cnblogs.com/wjq/p/14863580.html
#!/bin/bash
echo "$0:$0" # 当前脚本的文件名(间接运行时还包括绝对路径)。
echo "$n:$n" # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。
echo "$#:$#" # 传递给脚本或函数的参数个数。
echo "$*:$*" # 传递给脚本或函数的所有参数。
echo "$@:$@" # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。
echo "$?:$?" # 上个命令的退出状态,或函数的返回值。
echo "$$:$$" # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。
echo "$_:$_" # 上一个命令的最后一个参数。
echo "$!:$!" # 后台运行的最后一个进程的 ID 号。
$*
그리고$@
이는 큰따옴표("")로 묶이지 않은 경우 함수 또는 스크립트에 전달된 모든 매개변수 앞에 "$1""이 붙는다는 의미입니다. 2 " … " 2" … " 2"…"n"을 사용하면 모든 매개변수가 출력됩니다. 그러나 큰따옴표("")로 묶인 경우에는 "$*
"는 "$1 $2 ...로 모든 매개변수를 전체적으로 취합니다. 모든 매개변수는 n" 형식으로 출력됩니다. 모든 매개변수는 " 'n" 형식으로 출력됩니다. "`N"모든 매개변수를 형식으로 출력합니다."‘@`"는 각 매개변수를 "$1", " 2 " 、 … 、 " 2"、…、" 2"、…、"n" 형식으로 모든 매개변수를 출력합니다.
[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
$!:
shift
이 명령은 매개변수를 이동하는 데 사용됩니다(왼쪽 시프트). 일반적으로 전달된 매개변수 수를 알지 못한 채 각 매개변수를 차례로 탐색하고 그에 따라 처리하는 데 사용됩니다. 일반적으로 Linux의 다양한 프로그램 시작 스크립트에서 사용됩니다.
#!/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
Shift 명령이 한 번에 이동하는 매개변수의 수는 전달하는 매개변수에 의해 지정됩니다.예를 들어 이제 $1, $2, $3, ..., $9 매개변수가 있습니다. 쉘 프로그램이 처음 4개의 명령줄 매개변수를 처리한 후(즉, 다음 5개의 매개변수가 남음) 다음을 사용할 수 있습니다.
shift 4
이 명령은 $9를 $1로 이동합니다.
#!/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
사례 소개
case ..... esac
그리고if ... then ... fi
그들은 모두 조건부 문장 구조입니다. 예를 들어 역순 알파벳 단어와 정방향 단어를 사용하여 쌍을 이룹니다.if
명령문, 끝에 사용됨fi
일치하다,esac
그리고case
쌍
case $参数变量 in # 以关键字 case 作为开始
"变量值1") # 变量值用双引号括起来,关键字用小括号括起来
程序段1 # 对应的逻辑
;; # 每个类别结尾使用两个连续的分号来处理
"变量值2")
程序段2
;;
"变量值3")
程序段3
;;
*) # 最后一个位置参数值会用*来代替所有其他值
程序段4
;;
esac # 关键字 esac(case 的反写) 结束
shift
성냥case ... esac
쉘 스크립트 수동 전달 매개변수 처리 구현#!/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 是一个未知选项