wait
停止脚本的运行,直到后台运行的所有作业停止为止(或者是特定任务号,进程号)
xargs
xargs的默认命令是echo,意味通过管道传来的输入通过xargs命令处理后,换行和空白都将被空格替代
xargs -i用法: ls *.txt | xargs -i cp ./{} target_dir/ 等效 cp *.txt target_dir/
basename
从文件名中去掉路径信息
dirname
从带路径的文件名中去掉文件名,保留路径信息
tr -cd "c" file.txt
-d 作用是删除指定的字符,这里说是要删除"c"
-c 作用是指定字符串补码,相当于取反操作
所以这里的意思是删除file.txt中除"c"以外的字符,这样输出就只剩下多个"c",
其可以用来统计字符数目
getopt的两种用法 "abcd:" 代表-d后面加数字参数
while getopt "abcd:" option
do
echo $option
echo $OPTARG
done
------------------------------
set -- `getopt "abcd" "$@"`
while [ ! -z "$1" ]
do
echo $1
echo $2
shift # need to do once again for -d
done
#!/bin/bash -r
会使得脚本在受限模式下运行,此模式会禁用一些命令,限制用户权限
进程替换把一个进程的输出回馈给另外一个进程,"<"或者">"与圆括号之间没有空格!
例子:
diff <(ls -l) <(ls -al)
cat <(ls -al) # 等同 ls -al | cat
tar cf >(bzip2 -c > file.tar.bz2) $directory_name
--------------------
while read line
do
...
done< <(command)
也可以用如下方法,但是使用管道会产生子shell,子shell中的变量是局部变量!
command | while read line
do
...
done
函数必须在第一次调用前完成定义
在一个函数中嵌套调用另外一个函数也是可以的
函数可以处理传递给他的参数并且能够返回他的退出码
在函数内部是看不到脚本的命令行参数的,就是说$0只能是函数的参数
为函数可以返回字符串或是数组,可以用一个在函数外可见的变量;或者让函数echo出他的返回值,输出到stdout上
然后通过命令替换的手段来捕获他
change()
{
eval "$1=\"yes\""
name="jack" # 非local
}
text="no"
echo "$name" # 空
change text
echo "$text" # yes
echo "$name" # jack 在函数调用之后,所有在函数内声明且没有明确声明为local的变量都可以在函数体外可见
!! 特别注意在递归中,你定义的变量如果不是local的,会出现一些奇怪的问题;比如在上一次递归已经给改变了!!