`
vr393vr
  • 浏览: 11823 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

shell实例(七) --参数/字符串替换

 
阅读更多

  1.说明 ${parameter-default} --------如果变量parameter没被声明,那么就使用默认值
  ${parameter:-default} -------如果变量parameter没被设置,那么就使用默认值
  filename=${1:-$DEFAULT_FILENAME}---------如果参数1没有设置,那么就取默认的DEFAULT_FILENAME
  ${parameter=default} ----如果变量parameter没声明,那么就把它的值设为default.
  ${parameter:=default} -----如果变量parameter没设置,那么就把它的值设为default. 
  ${parameter+alt_value} ----如果变量parameter被声明,那么就是用alt_value,否则使用null字符串.
  ${parameter:+alt_value} -----如果变量parameter被设置,那么就是用alt_value,否则使用null字符串. 
  ${parameter?err_msg} -----如果parameter已经被声明,那么就使用设置的值,否则打印err_msg错误消息.
  ${parameter:?err_msg} ----如果parameter已经被设置,那么就使用设置的值,否则打印err_msg错误消息.
  冒号在linux中的使用
  1、注释
  : this is comment
  : ' this is a multiple
  lines comment.'
  将注释作为参数传递给冒号命令, 因为没有输出所以可以当作注释阿,够巧妙吧。
  2、清空文件
  : > file
  2.使用参数替换和错误消息
  #! /bin/sh
  : ${HOSTNAME?} ${USER?} ${HOME?} ${MAIL?}
  echo
  echo "Name of the machine is $HOSTNAME."
  echo "You are $USER."
  echo "Your home directory is $HOME."
  echo "Your mail INBOX is located in $MAIL."
  echo
  echo "If you are reading this message,"
  echo "critical environmental variables have been set."
  echo
  echo
  ThisVariable=Value-of-ThisVariable
  : ${ThisVariable?}
  echo "Value of ThisVariable is $ThisVariable."
  echo
  echo
  : ${ZZXy23AB?"ZZXy23AB has not been set."}
  echo "You will not seen this message,because script already terminated."
  HERE=0
  exit $HERE
  3.变量长度
  ${#array
  • }和${#array[@]}表示数组中元素的个数
  •   #! /bin/sh
      E_NO_ARGS=65
      if [ $# -eq 0 ]
      then
      echo "Please invoke this script with one or two command-line arguments."
      exit $E_NO_ARGS
      fi
      var01=abcdEFGH28ij
      echo "var01 = ${var01}"
      echo "Length of var01 = ${#var01}"
      var02="abcd EFGH28ij"
      echo "var01 = ${var02}"
      echo "Length of var02 = ${#var02}"
      echo "Number of command-line arguments passed to script = ${#@}" -----参数个数
      echo "Number of command-line arguments passed to script = ${#*}"  -----参数个数
      exit 0
      4.参数替换中的模式匹配
      #! /bin/sh
      var1=abcd12345abc6789
      pattern1=a*c
      echo
      echo "var1 = $var1"
      echo "var1 = ${var1}"
      echo "Number of characters in ${var1} = ${#var1}"
      echo
      echo "pattern1 = $pattern1"
      echo "---------1--------"
      echo '${var1#$pattern1} = ' "${var1#$pattern1}"
      echo '${var##$pattern1} = ' "${var1##$pattern1}"
      echo;echo;echo
      pattern2=b*9
      echo "var1 = $var1"
      echo
      echo "pattern2 = $pattern2"
      echo "-------------------"
      echo '${var1%pattern2} = ' "${var1%$pattern2}"
      echo '${var1%%pattern2} = ' "${var1%%$pattern2}"
      echo
      exit 0
      5.修改文件扩展名
      #! /bin/sh
      E_BADARGS=65
      case $# in
      0|1)
      echo "Usage: `basename $0` old file suffix new file suffix"
      exit $E_BADARGS
      ;;
      esac
      for filename in *.$1
      do
      mv $filename ${filename%$1}$2
      done
      exit 0
      6.用模式匹配来解析任意字符串
      #! /bin/sh
      var1=abcd-1234-defg
      echo "var1 = $var1"
      t=${var1#*-*}
      echo "var1 (with everything,up to and including first - strippedout) = $t"
      t=${var1##*-*}
      echo "If var1 contains a \"-\",returns empty string... var1=$t"
      t=${var1%*-*}
      echo "var1 (with everything from the last - on stripped out) = $t"
      echo
      path_name=/home/bozo/ideas/thoughts.for.today
      echo "path_name=$path_name"
      t=${path_name##/*/}  ------截去最大匹配/*/
      echo "path_name,stripped of prefixes = $t"
      t=${path_name%/*.*} ------从尾部截去/*.*
      echo "path_name,stripped of suffixes = $t"
      echo
      t=${path_name:11}
      echo "$path_name,with first 11 chars stripped of = $t"
      t=${path_name:11:5}
      echo "$path_name,with first 11 chars stripped off,length 5 = $t"
      echo
      t=${path_name/bozo/clown}
      echo "$path_name with \"bozo\" replaced by \"clown\" = $t"
      t=${path_name/today/}
      echo "$path_name with \"today\" delete = $t"
      t=${path_name//o/O}
      echo "$path_name with all o's capitalized = $t"
      t=${path_name//o/}
      echo "$path_name with all o's deleted = $t"
      exit 0
      7.对字符串的前缀和后缀使用匹配模式
      ${var/#pattern/replacement}----如果变量var的前缀匹配pattern,那么就是用replacement来替换匹配到的pattern字符串
      ${var/%pattern/replacement}----如果变量var的后缀匹配pattern,那么就是用replacement来替换匹配到的pattern字符串
      #! /bin/bash
      v0=abc1234zip1234abc
      echo "v0 = $v0"
      echo
      v1=${v0/#abc/ABCDEF}
      echo "v1 = $v1"
      v2=${v0/%abc/ABCDEF}
      echo "v2 = $v2"
      echo
      v3=${v0/#123/100}
      echo "v3 = $v3"
      v4=${v0/%123/100}
      echo "v4 = $v4"
      exit 0
    分享到:
    评论

    相关推荐

      Shell中去除字符串里的空格或指定字符的方法

      网上很多办法,虽然是对的,用起来结果不对。这里提供正确办法。 去掉开头的空格 $text= 123 456 ...# 删除字符串中所有空格 sed 's/[[:space:]]//g' 当然还有简单办法: # 只替换一个 text=${text/ /-} #

      入门学习Linux常用必会60个命令实例详解doc/txt

      入门学习Linux常用必会60个命令实例详解 Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不...

      Advanced Bash-Scripting Guide <>

      9.2. 操作字符串 9.3. 参数替换 9.4. 指定类型的变量:declare 或者typeset 9.5. 变量的间接引用 9.6. $RANDOM: 产生随机整数 9.7. 双圆括号结构 10. 循环和分支 10.1. 循环 10.2. 嵌套循环 10.3. 循环控制 10.4. ...

      一天一个shell命令 linux文本内容操作系列-sed命令详解

      1.替换文件中的字符串 $sed -i ‘s/text/replace/g’ file #如果不加g结尾,则替换每一行的第一个 #如果只是打印,去掉-i 2.忽略前N处匹配,从N+1出开始替换 $sed -i ‘s/text/replace/2g’ file #在g前面加入数字N ...

      Linux高级bash编程

      使用模式匹配来分析比较特殊的字符串 9-20. 对字符串的前缀或后缀使用匹配模式 9-21. 使用declare来指定变量的类型 9-22. 间接引用 9-23. 传递一个间接引用给awk 9-24. 产生随机数 9-25. 从一副扑克牌中取出一张...

      shell 编程指南pdf

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      shell教程-30章,下了之后会让你大吃一惊,相当好

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      LINUX与UNIX SHELL编程指南(很全)

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      新版Android开发教程.rar

      • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • 集成的浏览器 基于开源的 WebKit 引擎 • 优化的图形库 包括定制的 2D 图形库, 3D 图形库基于 OpenGL ES 1.0 ...

      Linux与unix shell编程指南

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      VB代码库(大量的VB实例代码)

      2.增强型的字符串的查找与替换 3.从字符串数组中删除指定元素 4.字符串倒置 三.VB常用技巧 1.打开默认的浏览器 2.获取驱动器卷标 3.总在最前型窗口 4.目录浏览对话框 5.Shell的相关问题 6.使用回收站 7.启动...

      绝版经典《Linux与UNIX Shell编程指南》

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      LINUX与UNIX SHELL编程指南 高清PDF

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      Linux与Unix Shell编程指南(PDF格式,共30章)

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      linux shell 编程教程

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      Shell脚本专家指南

      当我还在学习shell脚本编程的时候,我会经常参考一些由别人编写出来的实例,以进一步地扩展自己的视野。而结果往往是我发现一些正在困扰着自己的问题,我的同事和朋友们却早已发明了又酷又聪明的解决方案。因此,我...

      Linux shell编程指南

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

      shell编程和unix命令

      10.5 使用替换修改字符串 97 10.6 将sed结果写入文件命令 97 10.7 从文件中读文本 98 10.8 匹配后退出 98 10.9 显示文件中的控制字符 99 10.10 使用系统sed 99 10.10.1 处理控制字符 99 10.10.2 处理报文输出 101 ...

    Global site tag (gtag.js) - Google Analytics