文档章节

shell数组与字符串

o
 osc_wws45aot
发布于 2019/08/20 20:42
字数 1229
阅读 8
收藏 0

一、数组

1、 是一段连续的变量,一段连续的内存存储空间

2、 解决了变量过多的问题;在同一类变量中,我们不需要去定义多个名字,二十以数组的方式来定义;(列表)

  (1) 数组值

  (2) 索引

  (3) 值

3、 如何定义数组:

  (1)declare -i 定义整数(申明)

  (2)declare -a 定义数组array

  (3)declare -A 定义数组嵌套

      a[1]=b

      b[1]=c

      c[1]=d

    【这样的数组值,在bash中不常用】

4、 如何给数组赋值

array=()

1、 array[0]=zz  (在计算机语言中,索引一般从0开始计算)

  (索引并不一定是数字:key-value array[zz]=1.87m)

  (shell中数组赋值,可以跳跃(条约赋值))

2、 array=(/var/log/*.log)

  做遍历

        array=(a b c d e)

3、 array=(‘zz=187’ ‘aaa=186’)

4、 通过read命令来赋值

(1)read -t 延迟 -p “指定说明”  -a 输入数组所需的变量值

(2)read -a a b c d e

5、 如何去调用数组:

$[变量名]

${数组名[索引]} 定义的是哪个索引你,就看到是对应索引指定的值

${数组名} 默认调用 索引=0 的值

${数组名[*]}或者 ${数组名[@]}调用数组内所有的值

(1)调用数组的数组长度

    length(“变量”)

    ${#变量名[*]}或者 ${#变量名[@]}

(2)添加数组值的特殊方式

    ${变量名[${#变量名[@]}]}=“值” 或者 ${变量名[${#变量名[*]}]}=值

(3)关于数组的其他操作

    数组切片

      ${变量名[@]:偏移量:所需要取出值的个数}

               echo ${a[*]:2:4}

      ${变量名[@]:偏移量}

    删除值

        unset ${变量名[索引]}

    注意:删除是索引所对的值,而没有带着索引一块删除;

    【知道值,如何查看索引?】

    修改值

      A[3]=c

      A[3]=d 覆盖即修改

 二、字符串

1、 字符串切片:

数组切片:${变量名[@]:偏移量:数值个数}

字符串切片: ${变量名:偏移量:数值个数}

                    ${变量名:-数值个数}  【*注意:冒号后面一定要加空格*】

                      ${变量名:-word}  默认赋值的意思

2、 基于模式取子字符串

(1)从左到右

    ${变量名#pattern} 删除pattern第一次匹配到的字串

    ${变量名##pattern}  删除所有pattern匹配到的字串

(2)从右向左

    ${变量名%pattern} 删除pattern第一次匹配到的字串

    ${变量名%%pattern}  删除所有pattern匹配到的字串

3、 字符替换

(1)${变量名/pattern/替换后的字符串}

          匹配第一个pattern,来进行替换  【pattern并不是正则表达式,而是文件通配符】

(2)${变量名//pattern/替换后的字符串}

          匹配所有的pattern,并进行替换

(3)${变量名/#pattern/替换后的字符串}

          指定匹配行首必须是pattern,才会替换

(4)${变量名/%pattern/替换后的字符串}

          指定匹配行尾必须是pattern,才能替换

注意:/ 分隔符,不能替换为(#%等特殊字符,和sed不一样)

4、 查找并删除

  替换中,不指定替换字符串,即为删除

  ${变量名/pattern}

  ${变量名//pattern}

  ${变量名/#pattern}

  ${变量名/%pattern}

5、 替换大小写

(1)tr 替换大小写

    tr [[:lower:]] [[:upper:]] < filename

(2)${变量名^^}  将字符串全部替换为大写

(3)${变量名,,}  将字符串全部替换为小写

6、 变量赋值

变量1=${变量名2:-word}  注意没有空格! 输入默认值的作用

变量1=${变量名2:+word}  不常用  变量2有值的情况下,才将word默认值赋值给变量1

7、脚本应用其他文件中的变量,如何实现?
        filename1
        vim filename1
            a=1
            b=2
        :wq
        vim filename1.sh
            . /全路径/filename  后者  source /全路径/filename    //执行整个代码
            c=$[$a+$b]
            ehco $c
        :wq
        bash filename1.sh      
        练习:修改hostname,定义一个 hostname文件 name=xxx ,hostname.sh
8、两个命令
       mktemp  创建临时文件以及目录  temp -- /tmp
       避免大家取的文件名字重复;mktemp 名字.XXXXXX (XX代表随机数(字母和数字))
       默认创建是随机的文件
        -d  创建的就是随机的 目录

       file=`mktemp a.XXXX`

       install   复制或删除文件,用法同copy
            优点:可以指定权限来复制文件
            用法:intall a文件 b目录     //复制a文件到b目录,并回复初始权限(文件:755 目录:644)
                      -t   源目对换
                      -d  创建
                      -m MODE
                      -o OWNER
                      -g GROUP
9、练习:
(1)获取此命令所依赖的所有库文件的列表
(2)复制命令至某目标目录(例如/mnt/sysroot)下的对应路径下
(3)复制此命令所依赖的所有库文件至目标目录下的对应路径下/lib64/ld-linux-x86-64.so.2  /mnt/sysroot/lib64/ld-linux-x86-64.so.2每次复制完成一个命令后,不要退出,而是提示用户输入新的复制的命令,并重复完成上述功能,直到用户输入quit退出;

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

pycurl libcurl link-time ssl backend (nss)

pip uninstall pycurlecho 'pycurl==7.19.5.1 --global-option="--with-nss"' > requires.pypip install -r requires.py...

小红手
17分钟前
17
0
计算机网络性能衡量

1、速率 单位时间(s)内传输信息(bit)量 单位:KB/s, MB/s, Gb/s K = 10^3 ,M = 10^6, G=10^9 一般表示的是理想的传输速率 2、带宽 计算机网络中的带宽和通信等领域的带宽概念不一样,计算机网...

osc_np3y0rbq
17分钟前
3
0
互联网掀起农家乐,巨头上演AI掘金战

配图来自Canva **前有网易、阿里AI养猪,后有腾讯AI养鹅,互联网大佬们纷纷玩起了“农家乐”,互联网的生意在尖端技术的引领之下频频跨界,巨头之间的较量也从线上延伸至线下。**自古“民以食...

osc_5cok9i01
19分钟前
5
0
原来!我在4年前就开始体验雾游戏了!

前有云游戏后有雾游戏,游戏的方式看来起来越来越多种多样。那么“震撼业界”的雾游戏到底是什么来头?它依靠什么改变游戏界?它的原理又是什么? 本月月初,著名的日本游戏杂志《Fami通》表...

osc_j34n26zn
20分钟前
5
0
活动预告|田溯宁与你相约GSMA Thrive·万物生晖,分享5G风口下的创新与投资洞察

在万物互联的时代背景下,5G+AI+IoT的技术变革与融合,正在引发一场深刻的全产业创新与变革。5G技术创新、行业应用及投资机遇已成为科技行业所瞩目的焦点。 6月30日,宽带资本董事长田溯宁将...

osc_0qnrwmy3
21分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部