linux basename命令的使用

首先使用 --help 参数查看一下。basename命令参数很少,很容易掌握。
 
$ basename --help 
用法示例:
 $ basename /usr/bin/sort       输出"sort"。
 $ basename ./include/stdio.h .h  输出"stdio"。
 
为basename指定一个路径,basename命令会删掉所有的前缀包括最后一个slash(‘/’)字符,然后将字符串显示出来。

basename命令格式:
basename [pathname] [suffix]
basename [string] [suffix]
 
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。
示例: 
$ basename /tmp/test/file.txt
file.txt
$ basename /tmp/test/file.txt .txt
file
 
注意点:
1、如果像下面脚本中传递参数给basename,参数为空,basename会将参数左移
2、basename最多接受两个参数,如果设置的参数多于两个,会提示错误。

参考:http://en.wikipedia.org/wiki/Basename
 
以下是一个简单的脚本,测试了一下basename:

1. #!/bin/bash
2. # basename.sh
3. echo Testing basename
4. echo -------------
5. echo "basename \$1/\$2 .txt; suffix is .txt"
6. filename=`basename $1/$2 .txt`
7. echo $filename
8. echo -------------
9. echo "basename ab.c .c; suffix is .c"
10. basename ab.c .c
11. echo "basename ab b; suffix is b" 
12. basename ab b
13. echo -------------
14. echo Testing \$\@ and \$\#
15. echo Output \$\@
16. echo $@
17. echo Output \$\#
18. echo $#
19. # end of basename.sh
脚本运行结果:
 
1. 没有参数传递的情况:
2.
3. $./basename.sh
4. Testing basename
5. -------------
6. basename $1/$2 .txt; suffix is .txt
7. /
8. -------------
9. basename ab.c .c; suffix is .c
10. ab
11. basename ab b; suffix is b
12. a
13. Testing $@ and $#
14. -------------
15. Output $@
16.
17. Output $#
18. 0
19.
20. 传递参数的情况:
21.
22. $ ./basename.sh 1.txt 2.txt
23. Testing basename
24. ------------
25. basename $1 .txt; suffix is .txt
26. 1
27. -------------
28. basename ab.c .c; suffix is .c
29. ab
30. basename ab b; suffix is b
31. a
32. Testing $@ and $#
33. -------------
34. Output $@
35. 1.txt 2.txt
36. Output $#
37. 2
 
 
额外补充:
1、$@
$@ 为传递的参数
2、$#
$# 为传递参数的数量


就像脚本执行后的结果: 
1. Testing $@ and $#
2. -------------
3. Output $@
4. 1.txt 2.txt
5. Output $#
6. 2
3、$? 
是shell变量,表示"最后一次执行命令"的退出状态,一般0表示成功,非0数值表示没有成功。
 
切记:
$?永远表示shell命令最后一次执行后的退出状态,当函数执行完毕后,如果又执行了其它命令,则$?不再表示函数执行后的状态,而表示其它命令的退出状态. 
4、$!
    代表pid,进程id
 
5、$$
    代表ppid,父进程id
 
1. $ ./skype &
2. [2] 13549
3. $ echo $!
4. 13549
5. $ echo $$
6. 13032
7. $ ps -ef | grep skype
8. luck 13549 13032 4 19:19 pts/0 00:00:00 skype




http://monkeymusic.blog.163.com/blog/static/4797639200912533652666/

用途
返回一个字符串参数的基本文件名称。
语法
basename String [ Suffix ]
描述
basename 命令读取 String 参数,删除以 /(斜杠) 结尾的前缀以及任何指定的 Suffix 参数,并将剩余的基本文件名称写至标准输出。basename 命令应用以下创建基本文件名称的规则:
如果 String 参数是 //(双斜杠) 或如果 String 参数包含的都是斜杠字符,则将字符串更改为单个 /(斜杠)。跳过步骤 2 到 4。
从指定字符串除去任何拖尾的 / 字符。
如果在 String 参数中剩余任何 / 字符,则除去字符串的前缀直到(包含)最后一个 / 字符。
如果指定 Suffix 参数,且它和字符串中的剩余的字符相同,则不修改此字符串。例如,输入:
K > basename /u/dee/desktop/cns.boo cns.boo
结果是:
cns.boo
如果指定 Suffix 参数,且它和字符串中所有字符都不相同,但和字符串的后缀相同,则除去指定后缀。例如,输入:
K > basename /u/dee/desktop/cns.boo .boo
结果是:
cns
不能在字符串中查找到指定的后缀不作为错误处理。
basename 和 dirname命令通常用于 shell 脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。
退出状态
该命令返回以下退出值:
0                成功完成
〉0  发生错误
示例
要显示一个 shell 变量的基本名称,请输入:
basename $WORKFILE
此命令显示指定给 shell 变量 WORKFILE 的值的基本名称。如果 WORKFILE 变量的值是 /home/jim/program.c 文件,则此命令显示 program.c。
要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:
OFILE=`basename $1 .c`.o
此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,


它标识在当前目录中的文件。
注:`(重音符号)指定命令替换。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值