今晚在准备京东提前批面试的时候,发现京东岗位需求有一点很显眼“了解linux及基本的操作命令”linux常用命令,面试渐渐临近,顿时感觉有点慌;自己想了想能够问那些指令,头脑一片空白;到午夜来整理一下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($path['。 dirname=`echo $dir | sed -e s/target-//g -e s/build-//g` 。echo dirname($path)。
echo ${dirname %.*} --->结果是:cpp
(5)${dirname:0:4} 从左边第几个字符开始,及字符的个数
其中的0表示左边第一个字符开始,4表示字符的总个数。--->结果是:usr1
(6)${dirname:5} 从左边第几个字符开始,一直到结束。
其中的7表示左边第8个字符开始,一直到结束。--->结果是:Gtest-share/lyf/factory.cpp