添加上一个命令的最后一个参数

Alt .
反复按会继续向上搜索


字符串比较,注意要用引号

字符串比较说明
大多数时候,虽然可以不使用括起字符串和字符串变量的双引号,但这并不是好主意。为什么呢?因为如果环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。这里有一个错误的比较示例:
if [ $myvar = “foo bar oni” ]
then
echo “yes”
fi


在上例中,如果 myvar 等于 “foo”,则代码将按预想工作,不进行打印。但是,如果 myvar 等于 “foo bar oni”,则代码将因以下错误失败:
[: too many arguments


在这种情况下,”$myvar”(等于 “foo bar oni”)中的空格迷惑了 bash。bash 扩展 “$myvar” 之后,代码如下:
[ foo bar oni = “foo bar oni” ]


因为环境变量没放在双引号中,所以 bash 认为方括号中的自变量过多。可以用双引号将字符串自变量括起来消除该问题。请记住,如果养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。”foo bar oni” 比较 应该写成:
if [ “$myvar” = “foo bar oni” ]
then
echo “yes”
fi



算术表达式 $(( ))

$ myvar=”56”
$ echo $(( $myvar + 12 ))


名字空间,全局性

在 bash 中,每当在函数内部创建环境变量,就将其添加到 全局名称空间。这意味着,该变量将重写函数之外的全局变量,并在函数退出之后继续存在


捕获脚本的输出 2>&1 | tee T型管道

当显示正在生成的输出时,捕获每个脚本的输出
如果脚本不能自动地将输出发送到文件的话,可以利用 Bash shell 的一些函数来捕获所执行脚本的输出,如:
./test-bucket-1 -s 2>&1 | tee test-bucket-1.out


让我们来分析上面的命令:
“2>&1” 命令:
使用 “2>&1” 将标准错误重定向到标准输出。字符串 “2>&1” 表明任何错误都应送到标准输出,即 UNIX/Linux 下 2 的文件标识代表标准错误,而 1 的文件标识代表标准输出。如果不用此字符串,那么所捕捉到的仅仅是正确的信息,错误信息会被忽略。
管道 “|” 和 “tee” 命令:
UNIX/Linux 进程和简单的管道概念很相似。既然这样,可以做一个管道将期望脚本的输出作为管道的输入。下一个要决定的是如何处理管道所输出的内容。在这种情况下,我们会将它捕获到输出文件中,在此示例中将之称为 “test-bucket-1.out”。
但是,除了要捕获到输出结果外,我们还想监视脚本运行时产生的输出。为达到此目的,我们连接允许两件事同时进行的 “tee” (T- 形管道):将输出结果放在文件中同时将输出结果显示在屏幕上。 其管道类似于:
process –> T —> output file
V
screen


如果 只 想捕获输出结果而不想在屏幕上看到输出结果,那可以忽略多余的管道: ./test-bucket-1 -s 2>&1 > test-bucket-1.out
假若这样,相类似的管道如下:
process –> output file


sudo 输出重定向


当我们使用sudo 进行输出重定向的时候,命令的第二部分无法获得授权


sudo command > outputfile


<>—-root——<>—user—<>


解决方法:


使用’sudo tee’代替”>”;


使用”sudo tee -a”代替”>>”;


sudo command | sudo tee outputfile


<>—–root—–<>——-root——<>


产生随机数

dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -f1 -d” ”


取得一些文件名称中的一部分名称

interfaces=`ls session_* | sed ‘s/^session_//g’ | sed ‘s//.log$//g’`


如何用bash从文件中读一行

while read line
do
echo $line
done < “$filename”


如何用bash发现某些文件中是否没有包含string


jsps=`find . -name “*.jsp”`


for jsp in $jsps; do
havegb=`grep gb2312 $jsp`
[ ! -n “$havegb” ] && echo $jsp
done


cd 替换技巧

cd dir1/abc
使用cd old new实现替换
如:
cd dir1 dir2
等效于
cd dir2/abc


上一条命令替换

^foo^bar
将上一条命令中的foo替换为bar,然后执行