总结一下,方便用的时候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单词的行