日期:2014-05-16  浏览次数:20674 次

LINUX SHELL复习1
1  假如知道一个应用运行,想知道其进程id,可以用:
   pgrep xxxx获得其进程id
  再通过
   cat /proc/进程id号/environ
获得其环境变量


2  获得字符串长度
   var=1233333
    length=${#var}

3 判断当前脚本是否超级管理员执行
    if [ $UID -ne 0]; then
    .......

  root用户的uid为0

4 sort排序
    sork -nrk 1 data.txt  //按第1列逆序排列
  其中-k 指定按哪个键进行排序,-r说明是逆序排列,-n表示按数字排序
  sort -k 2 data.txt  按data.txt的第2列排序

5 uniq,消除重复的内容
     sort data.txt |uniq
    输出data.txt中不重复的内容
  找出文件中重复的行
      sort data.txt |uniq -d
6 根据扩展名切分文件名,比如从sample.jpg中提取文件名
     file_jpg="sample.jpg"
      name=${file_jpg%.*}
      echo $name  //输出sample

    extension=${file_jpg#*.}
    输出jpg

   其中,${var%.*}作用为从右到左,删除位于%右侧的字符 ${var%%.*},则右向左匹配最长的字符
   var=asd.sdsdf.fdfdf.txt
   echo ${var%.*} 输出 asd.sdsdf.fdfdf
   echo ${var%%.*} 输出asd
   而#*.则是从左到右,删除#找到的通配符的左测的字符,##则是找最长的
   则echo ${var#*.}输出sdsdf.fdfdf.txt  echo ${var##*.} 输出 txt

7 pushd和popd
    这两个命令可以将目录压入栈中,而不用复制粘贴
   pushd /var/www
   则栈中压入了/var/www ,再压入
    pushd /usr/src
   再dirs
   当要切换到某个目录时,则pushd +3 //则切换到目录第3层,从0开始编号
  移除  popd

8 grep检索
    1) 正则表达式  grep -E "[a-z]+" // 使用E选项
    2) 递归检索文件
         grep "xxxx" . -R -n  //当前目录下多级递归检索目录
     3)grep -i "HELLO" -i选项,忽略大小写
  
     4)grep 搜索中包括和排除某些文件
        grep 'test" . -r --include *.{c,txt}  只搜索后缀为c,txt的文件
       不包括:
        grep "test" . -r --exclude "readme"

9 sed
    可以替换给定文本中的字符串
   sed 'xxxxxxx'  file
   移除空白行
      sed '/^$d' file

10 AWK
   1)AWK 'BEGIN 语句块'  pattern 语句块   end  语句块’
    先执行begin语句块中的语句,然后从文件或者stdin中读取一行,再执行pattern,重复这个过程,直到
文件被完全读完;当读到输入流未尾时,执行end语句块结束
    echo -e "line1\nline2" |awk 'BEGIN {print "start"} {print} end {print "end"}}'
   则输出 Start
          line1
          line2
          end
   2)打印每一行的第2个字段和第3个字段
      awk '{print $2,$3}' file
    3) 统计文件中的行数
        awk 'end {print NR}' file


11 wget -c url //断点续传
   限制速度: wget --limit-rate 20k http://xxxx/xxxx.iso
  curl -C url  //断点续传
   curl http://xxxxx/index.html -O 将输出写到同名的文件中去
12 使用curl查找网页上的无效链接的bash脚本
    f [ $# -eq 2 ];
then
echo -e "$Usage $0 URL\n"
exit -1;
fi


echo Broken links:

mkdir /tmp/$$.lynx


cd /tmp/$$.lynx

lynx -traversal $1 > /dev/null
count=0;

sort -u reject.dat > links.txt

while read link;
do
output=`curl -I $link -s | grep "HTTP/.*OK"`;
if [[ -z $output ]];
then
echo $link;
let count++
fi

done < links.txt

[ $count -eq 0