Shell 基础

  • 创建,销毁

          mkdir 创建文件夹

          rmdir 删除文件夹

          rm     删除文件

  • Shell 值比较    

        -eq 数值相等。
        -ne 数值不相等。
        -gt 第一个数大于第二个数。
        -lt 第一个数小于第二个数。
        -le 第一个数小于等于第二个数。
        -ge 第一个数大于等于第二个数。

 

  • 反向读取文件流

        Using tac commands 

        Example:

                        $  tac test.txt | grep exception

  • 重命名文件

       1. mv a b 不保留原来的文件

       2. cp a b 保留原来的文件

  • 读取文件操作操作:

       echo "a" > test.txt

       echo "" >> test.txt

       echo "b" >> test.txt

       循环读取文件:

           cat test.txt | while read line

          do

               echo $line

          done

       只读取文件中的某一行:

          sed -n  '1p' text.txt   读第一行数据.

       用 set 获取读取的数据 

          set a = ` sed -n  '1p' test.txt `       (或: set  ` sed -n '1p' text.txt  `)

          echo $1

       但是 当 读取 一个空行的时候,不太适用.

       如: set ` sed -n '2p' test.txt `   第二行为空行. set 取值的时候是根据 空格来计算每个 field的。 所以 在这种情况下,建议还是用循环取值, 或者去掉源文件中的空行. 

       去掉一个文件中的空行:  

             sed '/^$/d' test.txt > test_noblank.txt 

             grep -v  '^$' test.txt > test_noblank.txt 

       去掉一个含空格的空行

             sed '/^[[]]*$/d' test.txt

       反向读取文件

       指令  tac

  • 比较

       echo "" >  test.txt

       cat test.txt |  while read line

       do

            if [ $line = '' ]

            then echo "empty"

            fi

       done

       (注: if [ $line = '' ]   的格式. 注意之间的空格.)

       echo "1" >> test.txt

       cat test.txt | while read line

       do 

           if [ $line !='' && $line -eq 1 ]    # 类型自动转换. '1' --> 1

           then echo "equal"

           fi

       done

 

       判断是否是数字

        if [ "${INPUT_NUM##[0-9]*}" = "" ]

  • 重复行/相同行 操作.

       echo "a" > test.txt

       echo "b" >> test.txt

       echo "a" >> test.txt

 

       去掉本文件的重复行      sort -u -o test_nodupli.txt test.txt

       echo "c" > mytest.txt

       echo "d" > mytest.txt

       echo "a" > mytest.txt

 

       去掉与另一个文件相同的行,并将两个文件合并成一个新文件

       cat test.txt mytest.txt | sort -o  | uniq -u  > no_duplicated.txt

 

       去掉与另一个文件相同的行,但不合并

        cat no_duplicated.txt test.txt | sort  | uniq - d  > no_dup_single.txt

  • 追加,替换... 文件内容操作

     将一个文件的内容追加到另一个文件的末尾

     cat mytest.txt >> test.txt

 

     用一个文件的内容替换另一个文件的内容

     cat mytest.txt > test.txt

 

     将一行文本追加至一个文件末尾

     echo "abcdefg" >> test.txt

 

  • 格式化文本内容

     echo "1,2,3,4,5,6/7" > test.txt

     # 去掉所有的逗号

     sed 's//,/ /g' test.txt > test_noComma.txt

     # 将 / 转换为 ','

     sed 's'/''/,'/''/g' test_noComma.txt > test_format.txt

     想转换后得到 一个 ' 字符,那么在shell 的 正则表示式 里面对应 '/''

 

  • SHELL 的基本运算

     运算符类型
           按位运算符  ~, <<, >>, &, |, ^
       #求和

            $   $[3 + 2]

            $   5

           但在 AIX  系统中运行会出错

 

       一种通用的方法:

       $  expr 3 + 2   (注意之间的空格)

       (输出)

       $ 5

       $ INCRE = $INCRE + 1 (注意空格, 自增)

        赋值运算符
       =、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=

 

  • 传参:
        AWK中的参数如何传递
        例
        awk -F',' '{if($3 == '$productid' && $4 ~ /'$country'/ && $5 ~ /'$pricetype'/ && $11 ~ /'$validto'/ && $12 ~ /'$released'/) print $0}' $DELETE_RECOVER_FILE_UNIQ >> $TEMP_CONFILCTED_PRICES_AFTER_INIT_CONVERSION
        参数 两边注意 引号

        sed -n "${START_LINES},${PROCESSING_LINES}p" $MN35808956_RDH_BACKUP
        注意两边的引号。
  • 打包:
        不压缩,只进行归档
        (tar xvf plugins.tar) 解压tar格式的文件
        (tar -tvf myfile.tar )查看tar文件中包含的文件
        压缩并归档
        (tar cfz plugins.tar.gz plugins) 把plugins目录打包且压缩为plugins.tar.gz文件
        (tar zxvf plugins.tar.gz) 把plugins.tar.gz解压缩
  • 正则表达式
        在 awk 中使用 A-Z 的时候注意加上 []
        awk -F',' '{if( $5 ~ /[A-Z]/ ) print $1","$2","$3","$5}' ALL_DELETE.csv > PART_1_DELETE.csv
       
        cat  upcaseChars | tr "[A-Z]" "[a-z]" > lowcaseChars 

          如果 想匹配 符号 ' 那么 必须 使用 '/''   转义之后需要用额外的 '' 包裹,否则不与匹配.

          随便举个例:

          123'456789'(test.txt中的内容) 把 '' 和包含在它之中的所有内容都清楚掉

          cat test.txt | sed 's/'/''.*'/''//g'

          但是 如果 是 123'456789'123'456789', 用上面的方式 会把 所有 从'4 开始到 9' 结束的所有字符给清掉。  所以 如果只想清除掉 '...' 和'' , 而保留123123的话,

          cat test.txt | sed 's/'/''[0-9]*'/''//g'

          注意 shell 中匹配 0-9 的任意多个 需要用 [0-9]* 而不是 [0-9]+ 

          '[0-9]/{3/}'  -- >匹配0-9中任意数字三次..注意 {}需要转义

 

  • Commands-Focus:

        grep:

            grep -E '219|216' fileName.  --> 如果需要在grep中使用‘与’或‘或’的模式,需要使用 -E 表明使用扩展模式

        国际字符模式匹配或匹配模式的类名形式

           [[:upper:]] <--> [A-Z]                              [[:alnum:]] <--> [0-9a-zA-Z]

           [[:lower:]]  <--> [a-z]                               [[:space:]] <--> 空格或Tab键

           [[:digit:]]   <-->  [0-9]                              [[:alpha:]]  <--> [a-zA-Z]

 

  • 时间差计算

          begintime=`date +%s`

          endtime=`date +%s`

          duration=expr $begintime - $endtime

          (+%s 或者 +%S均可)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值