1. 字符串切片:
            ${var:offset:number}
                取字符串的子串;
                取字符趾的最右侧的几个字符:${var:  -length}
                    注意:冒号后必须有一个空白字符;
                     
2. 基于模式取子串:
  ${var#*word}:其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,第一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符;
  ${var##*word}:其中word是指定的分隔符;功能:自左而右,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除字符串开头至此分隔符之间的所有字符;
                 
    mypath="/etc/init.d/functions"
    ${mypath##*/}:   functions
    ${mypath#*/}:  etc/init.d/functions
                 
  ${var%word*}:其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,第一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符;
  ${var%%word*}:其中word是指定的分隔符;功能:自右而左,查找var变量所存储的字符串中,最后一次出现的word分隔符,删除此分隔符至字符串尾部之间的所有字符;
             
    mypath="/etc/init.d/functions"
    ${mypath%/*}:  /etc/init.d
                 
    url=http://www.magedu.com:80
      ${url##*:}
      ${url%%:*}
                     
3. 查找替换:
  ${var/PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串;
  ${var//PATTERN/SUBSTI}:查找var所表示的字符串中,所有被PATTERN所匹配到的字符串,并将其全部替换为SUBSTI所表示的字符串;
             
  ${var/#PATTERN/SUBSTI}:查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串;
  ${var/%PATTERN/SUBSTI}:查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,将其替换为SUBSTI所表示的字符串;
                         
  注意:PATTERN中使用glob风格和通配符;
             
4. 查找删除:
  ${var/PATTERN}:以PATTERN为模式查找var字符串中第一次的匹配,并删除之;
  ${var//PATERN}
  ${var/#PATTERN}
  ${var/%PATTERN}
             
5. 字符大小写转换:
  ${var^^}:把var中的所有小写字符转换为大写;
  ${var,,}:把var中的所有大写字符转换为小写;
             
6. 变量赋值:
  ${var:-VALUE}:如果var变量为空,或未设置,那么返回VALUE;否则,则返回var变量的值;
  ${var:=VALUE}:如果var变量为空,或未设置,那么返回VALUE,并将VALUE赋值给var变量;否则,则返回var变量的值;
  ${var:+VALUE}:如果var变量不空,则返回VALUE;
  ${var:?ERROR_INFO}:如果var为空,或未设置,那么返回ERROR_INFO为错误提示;否则,返回var值;
             
  练习:写一个脚本,完成如下功能
        (1) 提示用户输入一个可执行命令的名称;
        (2) 获取此命令所依赖到的所有库文件列表;
        (3) 复制命令至某目标目录(例如/mnt/sysroot,即把此目录当作根)下的对应的路径中
            bash,  /bin/bash  ==> /mnt/sysroot/bin/bash
            useradd, /usr/sbin/useradd  ==>  /mnt/sysroot/usr/sbin/useradd
        (4) 复制此命令依赖到的所有库文件至目标目录下的对应路径下;
            /lib64/ld-linux-x8664.so.2  ==>  /mnt/sysroot/lib64/ld-linux-x8664.so.2
             
        进一步:
            每次复制完成一个命令后,不要退出,而是提示用户继续输入要复制的其它命令,并重复完成如上所描述的功能;直到用户输入“quit”退出脚本;
             
     
    写一个脚本:
        ping命令去查看172.16.1.1-172.16.67.1范围内的所有主机是否在线;在线的显示为up, 不在线的显示down,分别统计在线主机,及不在线主机数;
         
        分别使用for, while和until循环实现。
         
            #!/bin/bash
            #
            declare -i uphosts=0
            declare -i downhosts=0
 
            for i in {1..17}; do
                if ping -W 1 -c 1 172.16.$i.1 &> /dev/null; then
                    echo "172.16.$i.1 is up."
                    let uphosts+=1
                else
                    echo "172.16.$i.1 is down."
                    let downhosts+=1
                fi
            done
 
            echo "Up hosts: $uphosts, Down hosts: $downhosts."     
                         
                     
            #!/bin/bash
            #
            declare -i uphosts=0
            declare -i downhosts=0
            declare -i i=1
 
            hostping() {
                if ping -W 1 -c 1 $1 &> /dev/null; then
                    echo "$1 is up."
                    return 0
                else
                    echo "$1 is down."
                    return 1
                fi
            }
 
            while [ $i -le 67 ]; do
                hostping 172.16.$i.1
                [ $? -eq 0 ] && let uphosts++ || let downhosts++
                let i++
            done
 
            echo "Up hosts: $uphosts, Down hosts: $downhosts."                 
                 
    写一个脚本,实现:
        能探测C类、B类或A类网络中的所有主机是否在线;
             
            #!/bin/bash
            #
 
            cping() {
                local i=1
                while [ $i -le 5 ]; do
                    if ping -W 1 -c 1 $1.$i &> /dev/null; then
                        echo "$1.$i is up"
                    else
                        echo "$1.$i is down."
                    fi
                    let i++
                done
            }
 
            bping() {
                local j=0
                while [ $j -le 5 ]; do
                    cping $1.$j
                    let j++
                done
            }
 
            aping() {
                local x=0
                while [ $x -le 255 ]; do
                    bping $1.$x
                    let x++
                done
            }
             
        提示用户输入一个IP地址或网络地址;获取其网络,并扫描其网段;

【Linux】【Shell】【Basic】字符串操作的更多相关文章

  1. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  2. Linux Shell 截取字符串

    Linux Shell 截取字符串 shell中截取字符串的方法很多 ${var#*/} ${var##*/} ${var%/*} ${var%%/*} ${var:start:len} ${var: ...

  3. Linux shell去除字符串中所有空格

    Linux shell去除字符串中所有空格 echo $VAR | sed 's/ //g'

  4. shell脚本—— 字符串操作(长度,查找,替换)

    表达式 含义 ${var} 变量var的值, 与$var相同 ${var-DEFAULT} 如果var没有被声明, 那么就以$DEFAULT作为其值 * ${var:-DEFAULT} 如果var没有 ...

  5. shell中字符串操作【转】

    转自:http://blog.chinaunix.net/uid-29091195-id-3974751.html 我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧,当然shell编程也不例 ...

  6. Linux shell 获得字符串所在行数及位置

    shell 获得字符串所在行数及位置 01 获取字符串所在的行数 方式一:用grep -n [root@root]# cat test apple bit create delect exe flow ...

  7. Linux shell 判断字符串为空等常用命令

    1.判断字符串为空 if [ -z "$str" ]; then echo "empty string" fi 2.判断文件是否存在 if [ -f /home ...

  8. linux shell basic command

    Learning basic Linux commands Command Description $ ls This command is used to check the contents of ...

  9. linux shell中读写操作mysql数据库

    本文介绍了如何在shell中读写mysql数据库.主要介绍了如何在shell 中连接mysql数据库,如何在shell中创建数据库,创建表,插入csv文件,读取mysql数据库,导出mysql数据库为 ...

  10. Linux shell 将字符串分割成数组

    原文链接:http://1985wanggang.blog.163.com/blog/static/776383320121745626320/ a="one,two,three,four& ...

随机推荐

  1. Mysql - 整数类型的存储字节数和范围

    MySQL 整数类型的存储字节数和范围 type 存储字节数 有符号最小值 无符号最小值 有符号最大值 无符号最大值 TINYINT 1 -128 0 127 255 SMALLINT 2 -3276 ...

  2. 截取oracle字符串中的数字

    方法一:如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理. REGEXP_SUBSTR有5个参数,分别是: 第一个是输入的字符串 第二个是正则表达式 第三个是标 ...

  3. C# WINFORM进销存系统开发(内涵免费源码+部分实操视频讲解)

    互联网的时代,电商火爆,大家都开始进行线上销售货品,那你是如何管理你的商品库存和进销问题?软积木--小敏用的是C# WINFORM进销存系统来管理我的数据,给我带来了很多便利. 它是高频需求项目,很多 ...

  4. [第二章]c++学习笔记2(类和对象的基础3)

    隐藏的概念 隐藏的作用 使用例 成员函数的重载与缺省(附使用例) 注意事项

  5. [bzoj4094]Optimal Milking

    建立线段树,维护区间左端点选/不选,右端点选/不选且不含有相邻两个同时选的最大值,合并时注意细节即可 1 #include<bits/stdc++.h> 2 using namespace ...

  6. [atAGC001F]Wide Swap

    结论:排列$p'_{i}$可以通过排列$p_{i}$得到当且仅当$\forall 1\le i<j<i+k,(p_{i}-p_{j})(p'_{i}-p'_{j})>0$ 证明:构造 ...

  7. Mac更换鼠标指针样式_ANI、CUR文件解析

    前情提要 因为之前写了一篇mousecape的博客有一些回应,所以我决定写个续.主要是教大家怎么把cur文件和ani文件插入到mousecape里面,顺便提供几个做好的cape文件. 先给大家推荐一个 ...

  8. 文本分类:Keras+RNN vs传统机器学习

    摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比. 本文分享自华为云社区<基于Keras+RNN的文本分类vs基于传统机器学习的文本分 ...

  9. CF1601E Phys Ed Online

    考虑一个贪心. 我们一定采取的方案是 \(b_i = \min_{j = i - k}^i a_j\) \(\sum a_l + b_{l + k} + \min_{i = 1}^2{b_{l + i ...

  10. 【贾志豪NOIP模拟题】慰问员工 cheer 【最小生成树】【对边权值的一些处理】

    Description LongDD 变得非常懒, 他不想再继续维护供员工之间供通行的道路. 道路被用来连接 N(5 <= N <= 10,000)个房子, 房子被连续地编号为 1..N. ...