• linux之基础shell脚本编程4 字符串操作,变量赋值,配置用户环境


    linux之基础shell脚本编程1  基础变量赋值

    linux之基础shell脚本编程2 if语句循环判断

    linux之基础shell脚本编程3 函数数组

    linux之基础shell脚本编程4 字符串操作,变量赋值,配置用户环境 

    九 字符串

    9.1 bash的字符串处理工具:

    9.1.1 字符串切片:

    •   ${#var}   :返回字符串变量 var 的长度
    •   ${var:offset}   :返回字符串变量 var 中从第offset个字符后(不包括第offset个字符)的字符开始,到最后部分,offset的取值在 0 到 ${#var}-1 之间(bash4.2后,允许为负值)
    •   ${var:offset:number}   :返回字符串变量var中第offset个字符后(不包括第offset个字符)的字符开始,长度为number的部分
    •   ${var: -lengh}   :取字符串的最右侧几个字符   注意:冒号后必须有一空白字符

    9.2 基于模式取字串

     ${var#*word}   :其中word可以是指定的任意字符

        功能:自左到右,查找var变量所存储的字符串中,第一次出现的word,删除字符串开头至第一次出现word字符之间的所有字符

        

     ${var##*word}  : 自左到右,查找var变量所存储的字符串中,最后一次出现的word,删除字符串开头至最后一次由word指定的字符之间的所有内容

        

     ${var%word*}   :其中word可以是指定的任意字符;

        功能:自右到左,查找var变量所存储的字符串中,第一次出现的work,删除字符串最后一个字符向左至第一次出现word字符之间的所有字符

        

     ${var%%word*}  :自右到左,查找var变量所存储的字符串中,最后一次出现的work,删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符

        

    9.3 字符串处理

    1 查找替换

     ${var/pattern/substi}  :查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substi替换

     ${var//pattern/substi}  :查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substi替换

     ${var/#pattern/substi}  :查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substi替换

     ${var/%pattern/substi}  :查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substi替换

    2 查找并删除 : 只需将以上四条中的 '/substi'  去掉,就可以实现删除功能

    1. [root@centos7 ~]# file=kkoiju8894juhhydliii22387dddad    #先定义一个字符串
    2. [root@centos7 ~]# echo ${file/8/ooo}        # 第一次被 8 所匹配到的字符串,以 ooo 替换
    3. kkoijuooo894juhhydliii22387dddad
    4. [root@centos7 ~]# echo ${file//8/ooo}        # 所有被 8 所匹配到的字符串,以 ooo 替换
    5. kkoijuoooooo94juhhydliii223ooo7dddad
    6. [root@centos7 ~]# echo ${file/#k/ooo}        # 行首被 8 所匹配到的字符串,以 ooo 替换
    7. oookoiju8894juhhydliii22387dddad
    8. [root@centos7 ~]# echo ${file/%d/ooo}        # 行尾被 8 所匹配到的字符串,以 ooo 替换
    9. kkoiju8894juhhydliii22387dddaooo
    10. [root@centos7 ~]# echo ${file/#kk}            # 删除第一次被 8 所匹配到的字符串
    11. oiju8894juhhydliii22387dddad

    3 字符串大小写转换

     ${var^^}         :把var中的所有小写字母转换为大写

     ${var,,}         :把var中的所有大写字母转换为小写

    9.4 变量赋值

    ${var:-value}  :如果var为空或未设置,那么返回value;否则返回var的值

    ${var:+value}  :如果var不空,则返回value

    ${var:=value}  :如果var为空或未设置,那么返回value,并将value的值赋值给var;否则,返回var的值

    ${var:?error_info}  :如果var为空或未设置,那么返回error_info;否则,则返回var的值

    为脚本程序使用配置文件,实现变量赋值

    首先,定义一个文本文件,每行定义"name=value" ;然后在脚本中 source 此文件即可

    shell变量一般是无类型的,但是bash shell提供 了declare和typeset两个命令用于指定变量的类型,两个命令时完全等价的

    declare [选项] 变量名

      -r 将变量设置为只读属性

      -i 将变量定义为整形数

      -a 将变量定义为数组

      -f 显示此脚本前定义过的所有函数名及其内容

      -F 仅显示此脚本前定义过的所有函数名

      -x 将变量声明为环境变量

      -l 将变量值转为小写字母

      -u 将变量值转为大写字母

    如果第一个变量的值是第二个变量的名字,从第一个变量引用第二个变量的值就称为间接变量引用

    1. var1=var2
    2. var2=value

    var1的值是var2 ,而var2又是变量名,var2的值为value,间接变量引用是指通过var1获得变量值value的行为

    bash shell 提供了两种格式实现间接变量引用

    1. eval var=\$$var2
    2. var=${!var2}

    比如:

    1. [root@centos7 ~]# var=nihao
    2. [root@centos7 ~]# var1=var
    3. [root@centos7 ~]# echo $var1
    4. var
    5. [root@centos7 ~]# echo ${!var1}
    6. nihao
    7. [root@centos7 ~]# eval var3=\$$var1
    8. [root@centos7 ~]# echo $var3
    9. nihao

    eval命令将会首先扫描命令行进行所有的置换,然后在执行该命令。该命令适用于那些一次扫描无法实现其功能的变量,该命令对变量进行两次扫描

    10,用户自定义设置

    10.1 创建临时文件

    命令: mktemp :创建的临时文件可避免冲突

    Usage: mktemp [OPTION]... [TEMPLATE]

       TEMPLATE: filename.XXX   X至少要出现三个 

    10.2 安装复制文件

    命令: install 

    1. Usage: install [OPTION]... [-T] SOURCE DEST    创建单文件
    2.   or:  install [OPTION]... SOURCE... DIRECTORY
    3.   or:  install [OPTION]... -t DIRECTORY SOURCE...
    4.   or:  install [OPTION]... -d DIRECTORY...    #创建空目录

    选项:

    1.  -m MODE,默认755 
    2.  -o OWNER 
    3.  -g GROUP

    10.3 bash如何展开命令行

    把命令行分成单个命令词 

    展开别名 

            展开大括号种的声明({}) 

            展开波浪符声明(~) 

    命令替换$() 和 ``) 

    再次把命令行分成命令词 

    展开文件通配(*、?、[abc]等等) 

    准备I/0重导向(<、>) 

    运行命令

    防止扩展 

    反斜线(\)会使随后的字符按原意解释 $ echo Your cost: \$5.00      Your cost: $5.00 

    加引号来防止扩展 

     单引号(’)防止所有扩展 

     双引号(”)也防止所有扩展,但是以下情况例外: 

         $(美元符号) - 变量扩展 

         `(反引号) - 命令替换 

         \(反斜线) - 禁止单个字符扩展 

         !(叹号) - 历史命令替换

    11 bash的配置文件

    按生效范围划分,分为两类:

     全局配置:

    1.     /etc/profile
    2.     /etc/profile.d/*.sh
    3.     /etc/bashrc

     个人配置:

    1. ~/.bash-profile
    2. ~/.bashrc

    12 shell 登陆两种方式

    交互式登陆:

     1,直接通过终端输入账号密码登陆;

     2,使用"su -UserName" 切换的用户

     执行顺序:

        /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

    非交互式登陆:

     1,su UserName

     2,图形界面下打开的终端

     3,执行脚本

     执行顺序:

        ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

    profile类:

    按功能划分存在两类:

        profile类和bashrc类

    profile类:为交互式登陆的shell提供配置

        全局: /etc/profile, /etc/profile.d/*.sh

        个人: ~/.bash_profile

        功用:

        1,用于定义环境变量

        2,运行命令或脚本

    bashrc类

    bashrc类:为非交互式和交互式登陆的shell提供配置

        全局: /etc/bashrc

        个人: ~/.bashrc

        功用:

        1,定义命令别名和函数

        2,定义本地变量

    编辑配置文件生效的方法

    1,重新启动shell进程

    2,重新载入配置文件 . 或 source

    bash 退出任务

    保存在 ~/.bash_logout文件中(用户)

    在退出登陆shell时运行

    用于创建自动备份和清除临时文件


    练习:

    1、让用户(管理员或所有用户)的PATH环境变量的值多出 一个路径,例如多如/usr/local/apache2/bin 

    1. [root@centos7 bin]# echo "PATH=$PATH:/usr/local/apache/bin" >> /etc/bashrc
    2. [root@centos7 bin]# . /etc/bashrc

    2、用户wang登录时自动启用别名rm=‘rm –i’ 

    1. [root@centos7 cent]# echo "alias rm='rm -i'" >> /home/cent/.bashihrc
    2. [root@centos7 cent]# su cent
    3. [cent@centos7 ~]$ alias rm
    4. alias rm='rm -i'

    3、用户登录时,显示红色字体的警示提醒信息 “hi,dangerous!”

    echo "echo -e '\033[31m hi,dangerous! \033[0m'" >> /etc/profile.d/hac.sh

  • 相关阅读:
    使用idea,操作git创建分支,回滚版本,合并分支 ---全流程配图---
    sql查询之查询基础
    如何加快Chrome谷歌浏览器下载速度?
    文字的选择与排版
    一文彻底吃透自动化测试框架所有知识,看完就可以直接独立搭建自动化测试框架
    文档外发控制与安全:实现高效协作与数据安全的关键
    CentOS7 离线安装 Zabbix5.0
    【2023,学点儿新Java-42】赋值运算符 及其 基础练习(含整体分析解释,适合小白学习哦)| 复合赋值操作符:“+=“、“++“、“*=“的综合应用
    【数据库与事务系列】分库分表中间件
    ACM数论总结5
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126290368