今晚在准备京东提前批面试的时候,发现京东岗位需求有一点很显眼“了解linux及基本的操作命令”,面试渐渐临近,顿时感觉有点慌;自己想了想能够问那些指令,头脑一片空白;到午夜来整理一下Linux命令在平时写编译脚本比较容易用的,也看了一些实习公司同事写的shell脚本经常使用的,再翻翻以往大佬面试的面经,总结对比一下。
1、shell中变量$#,$$,$0....$n,$?
(1)$0 :Shell本身的文件名 ,如:用$0可以获得runMake.sh文件;
(2)$1~$n:Shell文件的各参数值(跟在.sh文件后的)。$1是第1参数、$2是第2参数…;
(3)$# :添加到Shell的参数个数 ,参数一般是以空格隔开;
(4)$? :最后运行的命令的结束代码(返回值) ;
(5)$@ :所有参数列表,"$@"用引号括起来的情况,以"$1" "$2" … "$n" 的形式输出所有参数;
(6)$$ :Shell本身的PID(ProcessID);
(7)$! :Shell最后运行的后台Process的PID ;
备注:
cd "$(dirname "$0")" //找到.sh文件所在的目录名
2、重定向输出
在shell脚本中0表示标准输入,1表示标准输出,2表示标准错误输出,>和1>都是标准输出重定向
2>&1表示把标准错误输出到标准输出,&>file表示把标准输出和标准错误输出都重定向到file文件中
rm -rf $(filename) &> /dev/null //将标准输出和标准错误输出都丢弃,/dev/null一个空设备文件
grep "\<shell\>" file.txt > log1 //log1里只有标准输出
grep "\<shell\>" file.txt > log2 1>&2 //log2里面什么都没有
grep "\<shell\>" file.txt > log2 2>&1 //log3里面既有标准输出又有标准错误输出
注:标准输出相当于stdout,标准错误输出为stderr,标准错误输出可以输出到屏幕中,可能不会输出到指定的log1..
3、字符串截取(主要用于文件管理比较多)
(1)# */:删除第一个/及其左边的字符串
(2)## */:删除最后一个/及其左边的字符串
(3)%%.*:删除最后一个.及其右边的字符串
(4)%.*:删除第一个.及其右边的字符串
ep:dirname=usr1/Gtest-share/lyf/factory.cpp
ehco ${dirname ##*/} --->结果是:factory.cpp
echo ${dirname #*/} --->结果是:Gtest-share/lyf/factory.cpp
echo ${dirname %.*} --->结果是:cpp
(5)${dirname:0:4} 从左边第几个字符开始,及字符的个数
其中的 0 表示左边第一个字符开始,4 表示字符的总个数。--->结果是:usr1
(6)${dirname:5} 从左边第几个字符开始,一直到结束。
其中的 7 表示左边第8个字符开始,一直到结束。--->结果是:Gtest-share/lyf/factory.cpp
(7)${dirname:0-10:7} 从右边第几个字符开始,及字符的个数
其中的 0-10 表示右边算起第十一个字符开始,7表示字符的个数。--->结果是:factory
(8)${dirname:0-10} 从右边第几个字符开始,一直到结束。
表示从右边第十一个字符开始,一直到结束。--->结果是:factory.cpp
4、设置权限:chmod
(1)选项:
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更
(2)who:u用户 g群组 o其它 a所有用户(默认)
(3)符号:+ 增加权限 -删除权限 =重新分配权限
(4)Mode: r读 w写 x执行
(5)文字设定法:
chmod [who] [+ | - | =] [mode] 文件名
(6)数字设定法
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。
例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)
数字设定法的一般形式为:
chmod 数字 文件名
ep:-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限