linux的九个Shell技巧[转]
linux的九个Shell技巧
一、用mkdir创建目录树:
mkdir不加参数使用时,只能建立一层目录,如果要建立多层目录,需要使用-p选项:
mkdir-pa/b/c
如果要建立一个复杂的目录,可以用加上{}的方法。例如想建立./a/a1./b/b1./b/b2三个目录树:
mkdir-p{a/a1,b/{b1,b2}}
二、带条件执行的组合Shell:
在linux中,Shell可以连续输入,并且用“;”隔开,但是这样只是简单的依次执行,如果前后Shell有依赖,就会很尴尬。这个时候我们就可以引入有条件执行:
cda/b/c&&ls
/*
*&&表示如果前一Shell执行成功,则执行下一条Shell。这里表示:如果能进入指定目录,则列出目录里的内容。
*/
cda/b/c||mkdir-pa/b/c
/*
*||表示如果迁移Shell执行失败,则执行下一条Shell。这里表示:如果指定目录不存在,这建立这个目录。
*/
三、在Shell中使用变量:
linux的Shell是可以使用变量的:
VAR=”./a/*.pdf”//“var”是变量名,命名规则应该和C/C++的命名规则差不多,不过羽毛建议大家只用全大写且简单的字串。
//注意等号两边不能有空格,否则不能正确理解。
echo$VAR//这个变量的使用,类似于C/C++中的宏定义,所以这条命令等价于:echo./a/*.pdf。
echo“$VAR”//这里等价于:echo“./a/*.pdf”。
如果变量名需要和其他字符组合使用,注意用{}隔开:
echo“${VAR}x”//等价于输入:echo“./a/*.pdfx”。
四、在Shell中使用SubShell:
在Shell中,如果将Shell用()括起来,将使得Shell执行在SubShell中:
(cd./a)&&ls//执行以后,会发现显示的内容还是原来路径中的,而不是./a中的。
五、Shell中grep的两个技巧:
1、假设有一个文本,如果我们只是需要知道字串“and”出现的行数,则更好的命令是:
grep-cand./a/test
并且上面这个方法将优于:grep-oand./a/test|wc-l
2、使用正则表达式(正则表达式表可以参见这里)。这里我们简单演示一个表达式:
grep‘[^a-zA-Z0-9]‘./a/test
六、Shell中awk的简单介绍:
1、查找具体的字段。例如我们需要将目录中2010/10/10创建的文件列出来,可以使用:
ll./a/|awk‘$6=“2010-10-10″‘//$7是表示匹配第六个字段。每一个字段都以空格为界限。注意awk后面总体被单引号括起来的。
2、在awk中可以使用length()函数返回每行文本的长度;index()函数返回首次发现匹配字串的位置;split()函数将字串按需拆分。这几个函数的用法和C/C++里的用法是基本相同的:
awk‘{i=length($0);printi}’./a/test
awk‘{i=index($0,”a”);printi}’./a/test
3、在上面的指令中,我们引用了$0,这个是表示使用输入的第零个参数——也就是输入的内容,在下面,我们还可以做一些高级的处理:
例如我们在文件./a/text2中数据为:
a,1,2
b,3,4
c,5,6
则:
awk-F,’{printf$1,$2+$3}’./a/text2//其中-F选项后面紧跟的逗号是指文中内容按逗号划分。
//若将文中逗号改为空格,则:
awk-F’‘‘{print$1,$2+$3}’./a/text2
将返回:
a3
b7
c11
七、使用pushd和popd管理目录:
有时候我们会在几个不同而且很深的目录中来回切换,这个时候使用pushd和popd将非常方便:
加入我们现在在目录“~”中,
dirs//将返回显示:~
pushd./a/a1///目录会切入到指定目录
pushd~/b/b1/
pushd../b2/
dirs//将返回显示:~/b/b2~/b/b1~/a/a1~
popd//路径会改变,且~/b/b2将出栈
dirs//将返回显示:~/b/b1~/a/a1~
pushd+//路径变为~/a/a1
dirs//将返回显示:~/a/a1~~/b/b1
pushd-
八、重用上一次参数:
1、!$:返回上一次使用的路径名(或文件名)。
2、!:1!:2…:依次返回上一次使用的第一、二……个参数。
九、其他:
1、echo$0和ps-p$$都可以返回当前所用的Shell。
2、df会显示你当硬盘信息。
3、cat>file可以将接下来输入的信息存入到file文件中,可以用Ctrl+D(即^D)来结束。
4、whoami会显示当前用户名