linux的九个Shell技巧
一、用mkdir创建目录树:
mkdir不加参数使用时,只能建立一层目录,如果要建立多层目录,需要使用-p选项:
mkdir -p a/b/c
如果要建立一个复杂的目录,可以用加上{}的方法。例如想建立./a/a1 ./b/b1 ./b/b2 三个目录树:
mkdir -p {a/a1,b/{b1,b2}}
二、带条件执行的组合Shell:
在linux中,Shell可以连续输入,并且用“;”隔开,但是这样只是简单的依次执行,如果前后Shell有依赖,就会很尴尬。这个时候我们就可以引入有条件执行:
cd a/b/c && ls
/*
*&&表示如果前一Shell执行成功,则执行下一条Shell。这里表示:如果能进入指定目录,则列出目录里的内容。
*/
cd a/b/c || mkdir -p a/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 -c and ./a/test
并且上面这个方法将优于:grep -o and ./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); print i}’ ./a/test
awk ‘{i = index($0,”a”); print i}’ ./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
将返回:
a 3
b 7
c 11
七、使用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 会显示当前用户名
一、用mkdir创建目录树:
mkdir不加参数使用时,只能建立一层目录,如果要建立多层目录,需要使用-p选项:
mkdir -p a/b/c
如果要建立一个复杂的目录,可以用加上{}的方法。例如想建立./a/a1 ./b/b1 ./b/b2 三个目录树:
mkdir -p {a/a1,b/{b1,b2}}
二、带条件执行的组合Shell:
在linux中,Shell可以连续输入,并且用“;”隔开,但是这样只是简单的依次执行,如果前后Shell有依赖,就会很尴尬。这个时候我们就可以引入有条件执行:
cd a/b/c && ls
/*
*&&表示如果前一Shell执行成功,则执行下一条Shell。这里表示:如果能进入指定目录,则列出目录里的内容。
*/
cd a/b/c || mkdir -p a/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 -c and ./a/test
并且上面这个方法将优于:grep -o and ./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); print i}’ ./a/test
awk ‘{i = index($0,”a”); print i}’ ./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
将返回:
a 3
b 7
c 11
七、使用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 会显示当前用户名