总结一下,方便用的时候copy。不一定全,但都是自己用过的。
我一般用这个来检测nohup.out文件是否有错误.
shell中的数学运算方式
1. c =`echo "$a+$b"| bc` 2. echo "$[1*10]" 3. echo "$[34/10]" 4. result=$(($value_a - $value_b))
判断文件后缀
file=test.cpp if [ "${file##*.}" = "h" ];then echo for .h file elif [ "${file##*.}" = "cpp" ];then echo for .cpp file fi
for循环和索引
count=0 for value in ${array[@]} do count=`expr $count + 1` done
获取CPU型号
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq | awk -F @ '{print $1}' | sed 's/^ *//
获取CPU频率
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq | awk -F @ '{print $2}' | sed 's/^ *//'
物理CPU和core数
echo $(($(cat /proc/cpuinfo | grep physical\ id | awk '{print $4}' | tail -1) + 1)) #物理CPU个数 echo $(($(cat /proc/cpuinfo | grep processor | awk '{print $3}' | tail -1) + 1)) #core数
while循环,注意while循环里的有些语句会吞掉文件的内容
exec 3 < value.txt while read line <&3 do echo $line done
case语句示例
case $value in test1) echo test1;; test2) echo test2;; *) echo default;;
数组长度
echo ${#array[*]}
大小写转换
echo TEST | tr "[:upper:]" "[:lower:]" #将大写转成小写 echo test | tr "[:lower:]" "[:upper:]" #将小写转成大写
date获取多天(分钟,年)前的时间
date -d "5 days ago" "+%Y-%m-%d %H:%M:%S" #五天以前 date -d "5 minutes ago" "+%Y-%m-%d %H:%M:%S" #五分钟以前 date -d "5 years ago" "+%Y-%m-%d %H:%M:%S" #五年以前
date获取当前时间的unix时间戳
date '+%s'
将变量值作为变量名
array=(UVMBJ UVMJH) for i in ${array[*]} do eval echo \${$i} done
将多行输出按规则合并成一行
cat t.txt | paste -s -d\| -
awk中的遍历和match函数
awk '{ for (i = 1; i <= NF; i++) if (match($i,/obj=[0-9]/)) printf("%s\n",$i); else printf("%s ",$i) }' value.txt
处理指定的行(例子中是第三行)
awk 'NR==3 {print $1}' value.txt
一个包括开始和结束的常用awk程序,可以将awk中的变量导出到shell
value= eval $( awk 'BEGIN { print "begin" awk_value1=0 awk_value2=0 } { for(i=1;i<=NF;i++){ awk_value1++; awk_value2++; } } END{ printf("va0=%d;va1=%d", awk_value1, awk_value2); } ' $file ) sum=`echo "$va0+$va1"|bc`
删除字符串中的下划线,并将首字母换成大写
RemoveUnderscore(){ local name=$1; shift 1 echo $name | awk -F _ '{ for(i=1;i<=NF;i++){ printf("%s%s",toupper(substr($i,0,1)),substr($i,2,length($i)-1)); }}' }
查看连接数等
netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a, s[a]}'
交换匹配的两行的内容
$ cat value.txt LINE1 LINE2 $ sed -i '/LINE1/{h;d};/LINE2/{G}' value.txt $ cat value.txt LINE2 LINE1
去掉行首的空格和shift
sed -i 's/^[[:space:]]*//' value.txt
去掉行尾的空格和shift
sed 's/[ \t]*$//g' value.txt
在行首插入
sed 's/^/hello /g' value.txt
在行尾插入
sed 's/$/ hello/g' value.txt
按顺序合并所有行
$ cat value.txt LINE1 LINE2 LINE3 $ sed -i ':a;N;s/\n//;ba;' value.txt $ cat value.txt LINE1LINE2LINE3
xml中的一个正则替换
sed 's/[0-9]*<\/id>/ 0000<\/id>/'
删除匹配行的下一行
$ cat value.txt LINE1 LINE2 $ sed '/LINE1/{n;d}' value.txt LINE1
在匹配行前插入一行
sed -i '/\/sbin\/service network restart/i \/sbin\/service NetworkManager stop' value.txt
在匹配行后插入一行
sed -i '/\/sbin\/service network restart/a \/sbin\/service NetworkManager stop' value.txt
在第一行前插入一行
sed -i '1 i\test test' value.txt
注释匹配行
sed -i '/value/s/.*/#&/' value.txt #注释包含value单词的行