linux--shell中$参数提取

来源:互联网 发布:wlan 数据分流技术 编辑:程序博客网 时间:2024/05/16 02:41
$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同

$@ 跟$*类似,但是可以当作数组用


-------------------------------------------------------我是分割线-------------------------------------------------


UID是用户ID,PID是进程ID,PPID是父进程ID。

getppid() 获取父进程 id,
getpid() 获取当前进程 id.

pid = 0表示是子进程,

pid > 0表示是父进程阿,

pid < 0通常指创建进程失败而返回给父进程的值


 linux下的pid起始数为1 永远是init进程

pid=1 :init进程,系统启动的第一个用户级进程,是所有其它进程的父进程,引导用户空间服务。

pid=2 :kthreadd:用于内核线程管理。
pid=3 :migration,用于进程在不同的CPU间迁移。
pid=4 :ksoftirqd,内核里的软中断守护线程,用于在系统空闲时定时处理软中断事务。
pid=5 :watchdog,此进程是看门狗进程,用于监听内核异常。当系统出现宕机,可以利用watchdog进程将宕机时的一些堆栈信息写入指定文件,用于事后分析宕机的原因。


-------------------------------------------------------我是分割线-------------------------------------------------

假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt

可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个/及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个/  及其左边的字符串:my.file.txt
${file#*.}:删掉第一个.  及其左边的字符串:file.txt
${file##*.}:删掉最后一个.  及其左边的字符串:txt
${file%/*}
:删掉最后一个 /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个/  及其右边的字符串:(空值)
${file%.*}:删掉最后一个 .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个 .  及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的5个字节:/dir1
${file:5:5}
:提取第5个字节右边的连续5个字节:/dir2

也可以对变量值里的字符串作替换:
${file/dir/path}
:将第一个dir替换为path/path1/dir2/dir3/my.file.txt
${file//dir/path}
:将全部dir替换为path/path1/path2/path3/my.file.txt

利用${ }还可针对不同的变数状态赋值(沒设定、空值、非空值) 
${file-my.file.txt} 
:假如$file沒有设定,則使用my.file.txt作传回值。(空值及非空值時不作处理
${file:-my.file.txt} 
:假如$file沒有設定或為空值,則使用my.file.txt作傳回值。(非空值時不作处理)
${file+my.file.txt} 
:假如$file設為空值或非空值,均使用my.file.txt作傳回值。(沒設定時不作处理)
${file:+my.file.txt} 
:若$file為非空值,則使用my.file.txt作傳回值。(沒設定及空值時不作处理)
${file=my.file.txt} 
:若$file沒設定,則使用my.file.txt作傳回值,同時將$file賦值為my.file.txt(空值及非空值時不作处理)
${file:=my.file.txt} 
:若$file沒設定或為空值,則使用my.file.txt作傳回值,同時將$file賦值為my.file.txt(非空值時不作处理)
${file?my.file.txt} 
:若$file沒設定,則將my.file.txt輸出至STDERR(空值及非空值時不作处理)

${file:?my.file.txt} :若$file 没设定或为空值,则将my.file.txt输出至STDERR(非空值時不作处理)

${#var}可计算出变量值的长度:

${#file} 可得到27 ,因为/dir1/dir2/dir3/my.file.txt27个字节








0 0
原创粉丝点击