变 量 | 含义 |
---|---|
$0 |
脚本名字 |
$1 |
位置参数 #1 |
$2 - $9 |
位置参数 #2 - #9 |
${10} |
位置参数 #10 |
$# |
位置参数的个数 |
"$*" |
所有的位置参数(作为单个字符串) (必须被引用起来, 否则默认为"$@ ") |
"$@" |
所有的位置参数(每个都作为独立的字符串) |
${#*} |
传递到脚本中的命令行参数的个数 |
${#@} |
传递到脚本中的命令行参数的个数 |
$? |
上一条命令返回值(0表示成功,可以echo输出查看) |
$$ |
脚本运行的当前进程ID(PID) |
$- |
传递到脚本中的标志(使用set) |
$_ |
之前命令的最后一个参数 |
$! |
运行在后台的最后一个作业的进程ID(PID) |
./script argument1 argument2 argument3
在脚本中,$1引用第一个参数,$2引用第二个参数,依次类推;
$#可以计算向脚本传递的参数个数;
$*和$@都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数;
"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@"和$@输出结果一致
脚本test.sh内容如下
#!/bin/bash echo '$*输出如下:' for var in $* do echo "$var" done echo '"$*"输出如下:' for var in "$*" do echo "$var" done echo '$@输出如下:' for var in $@ do echo "$var" done echo '"$@"输出如下:' for var in "$@" do echo "$var" done
传递参数执行: ./test.sh va1 va2 va3 ,输出结果如下:
$*输出如下: va1 va2 va3 va4 "$*"输出如下: va1 va2 va3 va4 $@输出如下: va1 va2 va3 va4 "$@"输出如下: va1 va2 va3 va4
操作 | 测试条件 | 操作 | 测试条件 |
---|---|---|---|
-e |
文件是否存在 | -s |
文件大小不为0 |
-f |
是一个标准文件 | ||
-d |
是一个目录 | -r |
文件具有读权限 |
-h |
文件是一个符号链接 | -w |
文件具有写权限 |
-L |
文件是一个符号链接 | -x |
文件具有执行权限 |
-b |
文件是一个块设备 | ||
-c |
文件是一个字符设备 | -g |
设置了sgid标记 |
-p |
文件是一个管道 | -u |
设置了suid标记 |
-S |
文件是一个socket | -k |
设置了"粘贴位" |
-t |
文件与一个终端相关联 | ||
-N |
从这个文件最后一次被读取之后, 它被修改过 | F1 -nt F2 |
文件F1比文件F2新 * |
-O |
这个文件的宿主是你 | F1 -ot F2 |
文件F1比文件F2旧 * |
-G |
文件的组id与你所属的组相同 | F1 -ef F2 |
文件F1和文件F2都是同一个文件的硬链接 * |
! |
"非" (反转上边的测试结果) |
awk 'NR=x{print $y}' filename
更多awk相关可以参考awk命令入门 - 博客园 (cnblogs.com)