SHELL脚本初步了解

9 SHELL

9.2 命令

1.命令队列

  • \
    • 续行
  • ;
    • 命令之间分隔符
    • CMD1 ; CMD2 ; CMD3…
  • &
    • 将命令放入后台执行
    • CMD &
  • &&
    • 逻辑与
    • CMD1 && CMD2
      • CMD1执行成功,则执行CMD2
      • CMD1执行失败,则不执行CMD2
  • ||
    • 逻辑或
    • CMD1 || CMD2
      • CMD1执行失败,则执行CMD2
      • CMD1执行成功,则不执行CMD2

2.复合命令

  • 循环结构

    • until循环

      • until 测试命令; do 命令块; done

      • [$n -gt 100]=n>100

      • lt 小于

      • gt 大于

      • le 小于等于

      • ge 大于等于

until
while

  • while循环

      • while 测试命令; do 命令块; done

      • 例子

        • 循环处理某一个文件的每一行内容

        • n=0
          while read line; do
          let n++
          echo $line
          done < /tmp/test

          echo $n

while

     **推荐用第二种**

     第一种:

     | 进程间通信, 处在不同shell

     shell|子shell

     这时n为局部变量。
  • for循环

      • for (( 表达式一 ; 表达式二 ; 表达式三 )); do 命令块 ; done

      • for (( i=1; i<=100; i++ )); do 命令块 ; done

      • for 变量 [in 单词 ]; do 命令块; done

      • 错误示范

        在这里插入图片描述

    • 测试命令

      • test([])

        • 测试文件或值,用法:test EXPRESSION 或 [ EXPRESSION ]

        • 文件测试

          • test -f FILE file,测试FILE是否是普通文件

          • test -d FILE directory,是否是目录

          • test -e FILE exist,是否存在

          • test –n 字符串 #字符串的长度非零
            test –z 字符串 #字符串的长度是否为零
            
        • 数值测试

          • test integer1 -eq integer2 (equal)
          • -gt (greater than)
          • -lt (less than)
          • -ge
          • -le
          • -ne
        • 字符测试(字符加引号)

          • “>”
          • <
          • =
          • != 或 <>
          • -z STRING 空
          • -n STRING 非空
      • [[]]

        • 数值测试
        • 字符测试
  • 判断结构

    • if 测试命令; then 命令块; fi

    • if 测试命令; then 命令块1 ; else 命令块2; fi

    • if 测试命令1; then 命令块1; elif 测试命令2; then 命令块2;… else 命令块3; fi

    • case选择结构

      • echo -n "请输入一个动物的名称: "
        read ANIMAL
        echo -n “$ANIMAL有”
        case $ANIMAL in
        马|狗|猫)
        echo -n “四”
        ;;
        人|袋鼠)
        echo -n “两”
        ;;
        *)
        echo -n “未知数目的”
        ;;
        esac

        echo “腿.”

  • 命令组合

    • ()
      • 将()中的命令放入子shell中执行
      • 举例
        • for i in {1…254}; do (
          ping -c1 -W1 172.16.199.$i > /dev/null 2>&1
          if [ ? − e q 0 ] ; t h e n e c h o " 172.16.199. ? -eq 0 ]; then echo "172.16.199. ?eq0];thenecho"172.16.199.i is alive"
          else
          echo “172.16.199.$i is dead”
          fi
          )
          done
    • {}
      • 将{}中的命令放入当前shell中执行

3.shell算术运算

  • c=$[a+b]
  • c=$((a+b))
  • let c=a+b
  • expr $a + $b

4.shell参数

  • 位置参数
    • $1,$2,$3等
  • $@
    • 所有参数,参数1 参数2 …
  • $*
    • “参数1 参数2 …”
  • $?
    • 上一个命令执行状态返回值
  • $#
    • 参数的个数

5.命令执行

  • 简单命令扩展
  • 命令的搜索路径
    • PATH
  • 执行环境
  • 退出状态
  • 信号

6.shell脚本

  • 文件中命令的堆砌
  • 创建shell脚本
    • 创建以.sh结尾的文件
  • shell脚本执行
    • 通过脚本路径来执行
      • 需要脚本具有x权限
      • ./XX.sh
      • /XX/YY/ZZ.sh
    • bash FILENAME
      • bash -x FILE 调试shell脚本
      • 在子shell中执行,不需要文件由执行权限
    • source FILENAME
      • 在当前shell中执行在当前shell中执行
      • 一般用于配置类型的shell脚本

7.shell函数

  • 例子

shell函数

  • 格式

    • 函数名(){函数体}

    • 调用

      • 函数名 【参数】…

9.3 SHELL脚本

9.3.1 常用的文本处理命令

1.文本查看

  1. cat
  2. more
  3. less
  4. head
  5. tail
  6. vi/vim/nano

2.文件搜索

1.find

  • 用法: find PATH EXP
  • EXP
    • -name FILENAME
    • -size SIZE
    • -regex PATTERN 正则表达式匹配文件
    • -print0 文件名输出到一行中
    • -exec
      • 对找到的文件调用其他命令处理
      • find . -size -1k -exec ls -l {} ;
        2.locate
  • 根据索引查找文件,updatedb更新索引
  • yum install mlocate
  • locate FILENAME

3.文本处理

  1. grep

    • 正则表达式(Regular Expression)
      • 定义

        • RegularExpression
        • 由普通字符和元字符组合的一种用来描述一种字符串的匹配的模式(pattern)
      • 元字符(基本&扩展&perl)

        • 基础元字符
          • . #单个任意字符
          • |(扩展),选择功能
        • 次数
          • “*” #前一个字符出现任意次
          • ?(扩展) #前一个字符出现<=1次
          • +(扩展) #前一个字符出现>=1次
          • {n,m}(扩展) #前一个字符出现n到m次
            • {5,}
            • {,5}
            • {5}
        • 位置锚定
          • ^ ^#,开头

          • $ #$,结尾

          • ^$ 空白行

……

   - "单词"边界
   - - \ <  "单词"左边界
     
     - \ >  "单词"右边界
     
     - \b   配合-P选项连用
     
     - echo "the there they" | grep "\bthe\b"

grep -E

ifconfig

  • 分组
      • () 扩展元字符
        • 将某些字符作为一个整体
        • 分组(可以后向引用分组)
          • \1
        • 举例
          • grep -E “^(.).*\1$” test
    • []
      • 字符组中任意一个字符

      • [:upper:]

      • PERL支持

        • \d 等于 [0-9] 数字
        • \D
        • \s 空白字符(空格,制表符等)
        • \S
        • \w 英文字符(字母+数字+_)
        • \W

grep -	P

grep -E

‘abc+’ 和‘(abc)+’是不同的

  • 语法

    • grep [options] ‘PATTERN’ FILE
  • 选项

2.cut

  • 从文件的每一行截取一部分内容
  • -d 分隔符delimiter
  • -f 字段数field
  • -c
    • character字符位置
    • -c7-
    • -c7-10
    • -c-10

3.sort

  • 排序
  • -t 分隔符
  • -k 字段数
  • -r 逆序
  • -n 以数字大小排序
  • -u 去重unique

4.uniq

  • 去重之前先排序
  • -c
    • counting,统计重复次数
  • 例子
    • cut -d: -f7 /etc/passwd | sort | uniq -c | sort -n | tail -1 | awk ‘{print $2}’

5.wc

  • word counting,单词,字符数,字节数,行数统计
  • -l line
  • -w 单词
  • -m 字符数
  • -c 字节数

6.tee

  • 将上一个命令的输出结果重定向到文件并做标准输出

7.xargs

  • 将上一个命令的输出每一行作为参数传递给xrags后面的命令
  • 选项
    • -d 指定分隔符
    • -n 一次传几个参数
    • -ISTR 使用符号替代需要传递的参数
    • -t 显示执行命令
  • 例子
    • echo ‘/etc/fstab:/etc/inittab’ | xargs -t -d: -n1 -I{} cp -a {} /tmp
    • find . -size -1k -print0 | xargs -0 ls -l

8.join

  • 合并文件内容
  • join test1 test2
  • join -a1 test1 test2
  • join -a2 test1 test2
  • join -a2 -a1 test1 test2
  • join -o 1.2 2.3 test1 test2

9.tr

  • echo “abcdef” | tr a-z A-Z
  • echo “abcdef” | tr -d abc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值