1. shell的各种$变量
变量名称 | 代表含义 | 变量名称 | 代表含义 |
---|---|---|---|
$# | 传入参数的个数 | $@ | 所有传入的参数值 |
$$ | 脚本运行的当前进程ID号 | $! | 后台运行的最后一个进程的ID号 |
$- | 显示Shell使用的当前选项,与set命令功能相同 | $? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
$1 | 除脚本名外的第一个参数 |
# ./test.sh first second
$#的值是2
$0的值是./test.sh
$1的值是first
$2的值是second
$@的值是first second
$-的值是hB
$$的值是25406
$?的值是0
2.两个非常使用的命令:dirname和basename
(1)dirname获取脚本的所在路径
[user@centos76 ~]$ cat test.sh
pwddir=$(cd $(dirname $0);pwd)
echo ${pwddir}
[user@centos76 ~]$ ./test.sh
/home/user
(2)basename获取文件名
删掉所有的前缀包括最后一个slash(‘/’)字符
[user@centos76 ~]$ basename /home/test/test.sh
test.sh
basename NAME [SUFFIX] 可以去掉文件名后缀
[user@centos76 ~]$ basename /home/test/test.sh .sh
test
[user@centos76 ~]$ basename -s .sh /home/test/test.sh
test
[user@centos76 ~]$ basename -a any/str1 any/str2
str1
str2
3. for和while循环
关于循环里计数问题
for循环里的计数可以传到循环外,而while循环里的计数因为管道符 | 问题无法传到外面。那么如果将计数传到外面呢,可以试试下面的写法。
###for真的是怎么写都可以,无所谓,而while就不行
[user@centos76 ~]$ cat test.sh
#!/bin/bash
aa=0
for i in `cat log`;do aa=`expr $aa + 1`;done
echo "aa=$aa"
bb=0
cat log|while read line;do bb=`expr $bb + 1`;done
echo "bb=$bb"
[user@centos76 ~]$ ./test.sh
aa=139
bb=0
###改变while的写法
[user@centos76 ~]$ cat test.sh
#!/bin/bash
bb=0
while read line;do bb=`expr $bb + 1`;done < log
echo "bb=$bb"
[user@centos76 ~]$ ./test.sh
bb=139
未完待续,先这样,回头继续补充