Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1479267
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-05-16 16:05:24

Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4 st1\:*{behavior:url(#ieooui) } /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman","serif";}

    如何表示vi中的文本范围

  数字表示对应行号

    :set nu 可以显示出行号

  当前行用,表示

  最后一行用$表示

  全部行用%表示

    如何调用外部程序

  在命令前加!

    快速输入有规律的文本内容

  一行一个输入48个连续的主机名

    ,!for ((i=0;i<48;i++)) ;do echo cache_$i_ip : spi-con$i ;done;

  将当前目录下的所有数字结尾的目录名作为文件内容

    %!find type d |grep [0-9]$|xargs i ls -1 {}

    不用vi的办法要保存-排序-察看-排序。。

    vi中排序

  排序全部行

    :%sort

  去掉第2

    :1,$!awk ‘{print $1,$3}’

  只留下第2列大于10的列

    :%!awk ‘{if ($2>10) print $0}’

 

什么是Shell

  1. 读取输入并解释命令
  2. 替换特殊字符(通配符,历史命令符)
  3. 设置管道,重定向,后台处理
  4. 处理信号
  5. 环境控制
  6. 解释型编程语言

变量不分类型 (没有int,char,string)

不需要声明,直接使用

赋值:name=value (左右两边不能有空格)

使用:$name ${name}

    默认全局作用域(仅当前shell可见)

    local 限定函数局部变量

       function a() { local msg; }

    使用export导出变量,让子shell可以继承

    export var=1

    source .(dot) 在当前shell下执行脚本

   source ./config.sh

    自定义变量

    环境变量 (set命名可查看)

     $PATH,$IFS,$PS1,$PWD,$LINENO

    位置参数(Positional Parameters

       $1 $2 $3 ${10}

    特殊参数(Special Parameters

    $#:位置参数的数量        

    $*:所有位置参数的内容 ($1 $2 …)

    $@: 所有位置参数的内容($1 $2 )

    $?:命令执行后返回的状态

    $$:当前进程的进程号

    $!:后台运行的最后一个进程号

    $0:当前执行的进程名

    使用eval实现变量的间接引用

x='abc def'

y='$x'

echo $y

$x

eval echo $y

abc de

 

    ${!p}               #双重引用

       a=1

       b='a'

       echo ${!b}

    1

    ${!p*}             #返回所有以p开头的变量

       echo ${!P*}

       PATH PIPESTATUS PPID PS1 PS2 PS4 PWD

    ${p:-word}            #如果变量p不存在,返回"word”

    ${p:=word}     #如果变量p不存在,返回"word",并将p的值设为"word"

    ${p:?word}     #如果变量p不存在,将"word"打入STDERR

    ${p:+word}     #如果变量p存在,返回"word"

 

    双引号

    使用双引号可解释$符号,反引号和反斜线等特殊字符

       echo “$msg”  =>  显示msg变量值

    单引号

    与双引号类似,不同的是shell会忽略任何特殊符号

       echo ‘$msg’   => 显示$msg      

    反斜杆

       \c == ‘c’

    反引号(命令替换)

    用于执行系统命令并输出到变量

       echo The date and time is `date` 

 

    (list) list将在一个子shell中执行, 不会对当前shell产生影响,返回listexit

     { list; } 可以作组合命令用,list将在当前shell中被执行,list结尾处必须要有新行或‘;’,返回listexit,list前后必须有空格

    ((expression)) 算术计算

    [ ] [[ ]] 分支测试

 

    name=(value1 ... valuen) 此时下标从0开始

    name[index]=value

    unset name name=

 

    数组下标的范围没有任何限制,同时也不必使用连续的分量

$ A=(a b c def)

$ A[3]=bb

 

$ echo ${A[0]}             #取第一个元素

a

$ echo ${A[@]}          # 取全部元素

a b c def

$ echo ${#A[@]}   # 取得数组元素的个数

4           

 

遍历数组:

    total=${#A[*]}

    for ((i = 0; i < total; i++))

    do

       echo ${A[$i]}

    done

 

    if list; then command;

    [ elif list; then command; ] ...

    [ else command; ]

       fi

    case $word in

    [a-z]) list ;;

       *) default;;

   esac

  [ $# -eq 1 ] && slen=1 || slen=0

 

    对文件、字符串和数字使用test命令。test一般有两种格式:

       test condition [ condition ](注意空格)

          if [ $str = a.txt ];then

                  echo OK"

          fi

直接测试命令:

          if grep abc a.txt &>/dev/null;then

                        echo “Bingo!”

            fi

 

  推荐使用[[ ]]进行条件测试

     if [[ x$str== xa.txt && -f b.txt ]]

       then

              cmd;

       fi

  -f  -d  -z ……

man bash

CONDITIONAL EXPRESSIONS

 

    if [ $a lt 0 ]

   then

              echo OK

   fi

 

    推荐使用(( ))

       if  (( a > 0 ))

    then

              echo OK

       fi

 

    for name [ in word ] ; do list ; done

   for i in `ls *.result`;do cat $i; done

 

    for (( expr1 ; expr2 ; expr3 )) ; do list ;done

       for ((i=0;i<100;i++));do echo $i;done

 

    while list; do list; done

       while read line

       do

              echo $line

       done < a.txt

    until list; do list; done

阅读(360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~