shell脚本学习第三天——特殊变量
一、位置变量:$0 获取当前执行脚本的文件名,包括脚本路径。 seq 9|sed 's#[0-9]#$&#g'
seq -s " $" 1 10 | sed 's/1/$1/'
如果省略了首数或者增量,则默认其值为1,即使这样尾数仍小于首数。 $ seq 1000 #起始默认是 1,间隔默认也是1
$ seq 2 100 #从2打印到100,间隔默认是1
$ seq 1 3 10 #从1到10,间隔为3,结果是:1 4 7 10
$ seq -s " $" 1 10 #以 $作为分隔符打印1~10
关于sed函数的用法可参考 : 运行一个简单的shell程序 来观察$0以及$#具体含义: 二、进程状态命令:
一般用于判断上一个命令是否执行成功,如果成功为0。下面是$?的返回值:
实例: [yangni@centos6 shell]$ find -aa
find: unknown predicate `-aa'
[yangni@centos6 shell]$ echo $?
1 //参数错误
[yangni@centos6 shell]$ maek
-bash: maek: command not found
[yangni@centos6 shell]$ echo $?
127 //命令未找到
[yangni@centos6 shell]$ ./a.sh
-bash: ./a.sh: Permission denied
[yangni@centos6 shell]$ echo $?
126 //找到命令,无法执行
[yangni@centos6 shell]$ ls
a.sh
[yangni@centos6 shell]$ echo $?
0 //成功执行返回0
写一个死循环来测试: #!/bin/bash
echo $$ > a.log
while true
do
uptime
sleep 2
done
其他一些状态命令:$! 执行上一个指令的PID
$_ 在之前执行的命令或脚本的最后一个参数
$* 将所有参数视为单个字符串
$@ 这个程序的所有参数,这是把参数传给其他程序的
最佳方式
$*和$@的区别:$* 将所有参数视为单个字符串 如果带引号:
"$1$2$3" 单个参数
$@ 这个程序的所有参数,这是把参数传给其他程序的
最佳方式
"$1" "$2" "$3" 三个参数
如果不加引号,打印出来就不一样 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |