linux shell学习笔记1(特殊符号)

    技术2024-10-30  24

    #       注释,或者脚本第一行的#!/bin/bash

    ;        命令分隔符,可以用来在一行中来写多条命令

    ;;       终止case  例如:

             case  "$variable"  in

             abc)  echo "/$variable=abc"  ;;

             xyz)  echo  "/$variable=xyz" ;;

             esac

    "       部分引用

    '        全部引用

    /       转义

    ,       分隔算术操作,只有最后一项被返回

            let "t2=((a=9,15/3))"

            #set "a=9" and "t2=15/3"

    `      后置引用,命令替换

    :     空命令,等价于"NOP",起到true的作用

            如:

            :

            echo $?   #0

     

            死循环:

            while:

            do

                ...

            done

     

            在if/then中的占位符,如:

            if condition

            then :

            else

                   take-some-action

            fi

     

            在一个2元命令中提供占位符:

            :${username='whoami'}

            使用“参数替换”来评估字符串变量

            :${HOSTNAME?}${USER?}${MAIL?}

            #如果一个或多个必要的环境变量没被设置,就会打印出错信息

     

             :>data.txt  #文件data.txt被清空

             ":"用来做环境变量的分隔符

             echo $PATH

             /usr/local/bin:/usr/x11r6/bin:/sbin

     

    *       匹配文件名中的任意字符,数学运算中的乘

    **     幂运算

    !        取反

    ?       测试操做

    $       变量替换

    $       正则表达式的结束符

    ${}   参数替换

    $*,$@  位置参数

    $?     退出状态,0为成功,非0为失败

    $$     进程ID变量,脚本的进程ID

    ()      命令组,子shell。子shell中的变量对于脚本剩下的部分不可用,例如:

              a=123

              (a=321;)

              echo "a=$a"   #a=123

     

             初始化数组:

             Array=(element1,element2,element3)

     

    {aaa,bbb,xxx...}

             大括号扩展,其中不能有空格,

             cat {file1,file2,file3}>combined_file

             #将file1,file2,file3

    {}     代码块:创建了一个匿名函数,但与函数不同的是,在其中声明的变量对于脚本的其他部分还是可见的

             a=123

             {a=321;}

             echo "a=$a"   #a=321

             与()不同,{}中的代码块将不能正常地开启一个新的shell

    []       test表达式

             if [ -z "$1" ]   判断第1个参数是否为空

             if [ "$?" -eq 0 ] 判断上一条语句是否成功

             if [ -n "$2" ]   判断第2个参数是否为整型

             ......

    []       数组元素:

             Arrary[1]=slot_1

             echo ${Array[1]}

    >,>>,<<,<    重定向

             scriptname>filename 重定向脚本输出到文件中,并覆盖原有文件

             command&>filename 重定向stdout和stderr到文件中

             command>&2 重定向stdout到stderr中 ,1为stdout,2为stderr

             scriptname>>filename 重定向到脚本输出到文件中,并添加到文件末尾

    <,>    ASCII比较

    /<,/>  正则表达式中的单词边界

             grep  '/<the/>'  textfile

    |        管道,用来产生命令链

             cat  *.lst | sort | uniq

             #合并和排序所有的"*.lst"文件,然后删除所有重复的行

             管道中的一个进程的stdout必须被下一个进程做为stdin读入,如果管道中的某个命令产生一个异常,并中途失败,那么这个管道将过早的终止,这种行为被叫做“a broken pipe”,并且这种状态下将发送一个SEGPIPE信号

    >|     强制重定向

    ||      或逻辑

    &      后台执行

    &&    与逻辑

    -       之前的工作目录

            cd - #进入到上一个工作目录

            与$OLDPWD的环境变量相同

    ~      home目录

    ~+    当前的工作目录,与$PWD相同

    ~-     之前的工作目录,相当与$OLDPWD

    ^      正则表达式中的表示行首

     

     

     

     

    例子来源于《高级Bash脚本编程指南》

    最新回复(0)