shell脚本_永久环境变量和字符串操作

一、永久环境变量

1. 常见的环境变量

2. 设置永久环境变量

3.1.将脚本加进PATH变量的目录中

3.2.添加进环境变量里

3.2.修改用户的 shell 配置文件

二、字符串操作

1. 字符串拼接

2. 字符串切片

3. 字符串查找

4. 字符串替换

5. 字符串大小写转换

6. 字符串分割

7. 去除空白

8. 字符串长度

9. 其他常见字符串操作

结语


学习视频泷羽sec:

shell编程(2)永久环境变量和字符串显位_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1YGmDY9E74?spm_id_from=333.788.videopod.sections&vd_source=0e1eb78c133fc5f90cf3666ebd4c1a64


PS:这一期部分操作以roo权限来进行,如果不晓得怎么切换可以查看往期章节星海幻影-CSDN博客。

一、永久环境变量

环境变量是操作系统用来存储系统和应用程序配置信息的键值对。在 Shell 脚本中,环境变量的设置通常用于配置系统或应用程序的运行时环境。而永久环境变量是指那些在用户每次登录时都能自动加载的环境变量。

1. 常见的环境变量

在 Linux 或 Unix 系统中,永久环境变量是那些在系统启动时或用户登录时自动加载,并在会话期间保持有效的环境变量。以下是一些常见的永久环境变量,它们在系统中用来配置用户环境和程序行为。

  • 1.PATH

    • 作用:定义了操作系统搜索可执行文件的目录路径。当你在命令行输入命令时,Shell 会按照 PATH 中列出的目录顺序查找命令。

    • 常见配置:通过设置 PATH 环境变量,可以将用户自定义的程序目录添加到搜索路径中。

export PATH=$PATH:/usr/local/bin:/home/user/my_programs #设置
echo $PATH
  • 2.HOME

    • 作用:表示当前用户的主目录。在大多数 Linux 系统中,每个用户都有一个独立的主目录,用于存放个人文件和配置。

echo $HOME   # 输出当前用户的家目录路径
  • 3.USER

    • 作用:表示当前登录的用户名。这个变量会自动由系统设置,并用于指示当前会话的用户。

echo $USER   # 输出当前登录的用户名
  • 4.SHELL

    • 作用:指定当前用户使用的 Shell 类型。例如,对于使用 Bash 的用户,SHELL 的值通常是 /bin/bash

echo $SHELL  # 输出当前使用的 Shell,例如 /bin/bash

user是因为我是用的kali账号登录,然后su roo切换root账号。

2. 设置永久环境变量

要设置永久环境变量,通常有以下几种方法:

3.1.将脚本加进PATH变量的目录中

  • echo $PATH

  • mv script.sh /usr/bin/

  • 将预先准备的脚本赋予权限移动到PATH变量的目录中,新打开的shell窗口就可以输入该文件名执行脚本了。

3.2.添加进环境变量里

通过将 /root/ 目录添加到环境变量 PATH 中,使得该目录下的所有可执行文件都可以直接在命令行中执行。

export PATH=/root:$PATH
1.sh
  • export PATH=/root:$PATH:这行命令将 /root 目录添加到当前 PATH 环境变量的前面(注意 $PATH 在这里是当前环境变量的值)。

    • /root 是你想要添加的目录。

    • $PATH 是现有的 PATH 环境变量,包含了其他已有的目录路径。

    这样,当你执行一个命令时,系统会首先在 /root 目录中查找可执行文件。如果该目录下有你需要的可执行文件,就会优先执行该文件。

3.2.修改用户的 shell 配置文件

  • 对于 Bash 用户,一般修改 ~/.bashrc(对于交互式非登录 shell)或者 ~/.bash_profile(对于登录 shell)。

  • 对于 Zsh 用户,通常修改 ~/.zshrc 文件。

命令:

/usr/bin/vim /root/.bashrc
export PATH=/root:$PATH
esc-->:-->wq(退出)
source /root/.bashrc
  • /usr/bin/vim /root/.bashrc:使用 vim 编辑器打开 root 用户的 .bashrc 配置文件。

  • export PATH=/root:$PATH:将 /root 目录添加到 PATH 环境变量的最前面。

  • esc --> :wq:在 vim 中按 Esc 退出编辑模式,输入 :wq 保存并退出。

  • source /root/.bashrc:使 .bashrc 的修改立即生效。

  • 1.sh:执行名为 1.sh 的脚本文件(假设该脚本已设置可执行权限)。

ps:删除用rm或者编辑的方式,删除变量


二、字符串操作

在编程中,字符串操作是非常常见且重要的任务之一。无论是在文本处理、文件解析,还是在网络数据处理等场景中,我们都需要灵活地操作和处理字符串。尤其在 Shell 脚本 中,字符串操作不仅是脚本功能的基础,而且直接影响脚本的可读性和效率。

1. 字符串拼接

在 Shell 中,字符串拼接非常简单,可以直接通过空格来连接字符串:

str1="Hello"
str2="World"
result="$str1 $str2"  # 拼接后 "Hello World"
echo "$result"

2. 字符串切片

在 Shell 中,字符串切片使用 ${string:start:length} 语法:

text="Hello, World!"
slice="${text:0:5}"  # 获取 "Hello"
echo "$slice"

如果你想从某个位置切到结尾,可以这样做:

slice="${text:7}"  # 从位置 7 开始,获取 "World!"
echo "$slice"

3. 字符串查找

在 Shell 中,可以使用 grep[[ ]] 来判断子字符串是否存在:

  • 使用 [[ ]] 判断子字符串是否存在

    text="Hello, World!"
    if [[ "$text" == *"World"* ]]; thenecho "Found 'World'"
    fi
  • 使用 grep 查找字符串

    text="Hello, World!"
    echo "$text" | grep -q "World"  # 如果找到 "World",返回 0
    if [[ $? -eq 0 ]]; thenecho "Found 'World'"
    fi

4. 字符串替换

Shell 也可以进行简单的字符串替换:

  • 替换第一次出现的子字符串

    text="Hello, World!"
    result="${text/World/Python}"  # 替换第一个 "World" 为 "Python"
    echo "$result"  # 输出 "Hello, Python!"
  • 替换所有出现的子字符串

    text="Hello, World! Hello again!"
    result="${text//Hello/Hi}"  # 替换所有 "Hello" 为 "Hi"
    echo "$result"  # 输出 "Hi, World! Hi again!"

5. 字符串大小写转换

Shell 原生不直接支持大小写转换,但可以借助 trawk 等工具来实现:

  • 转为大写

    text="hello"
    result=$(echo "$text" | tr 'a-z' 'A-Z')  # 转为大写
    echo "$result"  # 输出 "HELLO"
  • 转为小写

    text="HELLO"
    result=$(echo "$text" | tr 'A-Z' 'a-z')  # 转为小写
    echo "$result"  # 输出 "hello"

6. 字符串分割

在 Shell 中,字符串分割通常是通过设置 IFS(内部字段分隔符)来实现的:

text="apple,banana,orange"
IFS=',' read -ra fruits <<< "$text"
# 现在数组 fruits 存储了 ["apple", "banana", "orange"]
for fruit in "${fruits[@]}"; doecho "$fruit"
done

7. 去除空白

  • 去除首尾空白字符(使用 sedawk):

    text="   Hello, World!   "
    result=$(echo "$text" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')  # 去除首尾空白
    echo "$result"  # 输出 "Hello, World!"
  • 去除中间的空白字符

    text="  Hello   World   "
    result=$(echo "$text" | tr -s ' ')  # 压缩多个空格为一个
    echo "$result"  # 输出 "Hello World"

8. 字符串长度

可以使用 ${#string} 来获取字符串的长度:

text="Hello, World!"
length=${#text}  # 获取字符串长度
echo "$length"  # 输出 13

9. 其他常见字符串操作

  • 字符串反转: Shell 本身没有内建的字符串反转函数,但可以用 rev 命令来反转字符串:

    text="Hello"
    result=$(echo "$text" | rev)  # 使用 rev 命令反转字符串
    echo "$result"  # 输出 "olleH"
  • 检查是否为数字

    text="12345"
    if [[ "$text" =~ ^[0-9]+$ ]]; thenecho "It's a number"
    elseecho "It's not a number"
    fi

这些是 Shell 脚本中常见的字符串操作方法。在实际使用时,你可以根据需求选择合适的命令和语法。对于更复杂的字符串操作,可以考虑使用外部工具如 awksedcut 等。


结语

                在 Shell 脚本编程中,环境变量和字符串操作是两个至关重要的基础知识点。通过掌握如何配置和管理永久环境变量,您可以在脚本中高效地使用外部工具和程序,提升脚本的灵活性和可重用性。而熟练掌握字符串操作,则能够帮助您在处理文本、解析数据和与其他程序交互时更加得心应手。

                在本篇中,我们探讨了设置永久环境变量的常见方法,并且详细介绍了如何通过编辑 shell 配置文件来实现变量的持久化。环境变量的配置不仅仅是为了简化脚本执行,还能让不同程序和工具之间相互配合,提高开发效率。

                与此同时,字符串操作的技巧为 Shell 脚本提供了丰富的文本处理能力。无论是简单的拼接、切片,还是更复杂的查找、替换和分割,掌握这些常见的操作能够帮助我们在处理动态数据时更加高效地完成任务。通过合理利用 Shell 提供的工具和命令,我们可以实现许多强大而灵活的字符串处理功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Go】-bufio库解读

目录 Reader和Writer接口 bufio.Reader/Writer 小结 其他函数-Peek、fill Reader小结 Writer Scanner结构体 缓冲区对于网络数据读写的重要性 Reader和Writer接口 在net/http包生成的Conn 接口的实例中有两个方法叫做Read和Write接口 type Conn interface {Read(b []b…

场景营销在企业定制开发 AI 智能名片 S2B2C 商城小程序中的应用与价值

摘要&#xff1a;本文深入剖析了品牌广告效果不佳与场景营销缺失之间的内在联系&#xff0c;阐述了场景营销对于品牌落地和转化的关键意义。同时&#xff0c;详细探讨了如何将场景营销理念与实践应用于企业定制开发的 AI 智能名片 S2B2C 商城小程序中&#xff0c;借助移动时代的…

uniapp 实现tabbar分类导航及滚动联动效果

思路&#xff1a;使用两个scroll-view&#xff0c;tabbar分类导航使用scrollleft移动&#xff0c;内容联动使用页面滚动onPageScroll监听滚动高度 效果图 <template><view class"content" ><view :class"[isSticky ? tab-sticky: ]">…

Flutter中的Material Theme完全指南:从入门到实战

Flutter作为一款热门的跨平台开发框架&#xff0c;其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用&#xff0c;包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例&#xff0c;让你轻松掌握这一工…

aws中AcmClient.describeCertificate返回值中没有ResourceRecord

我有一个需求&#xff0c;就是让用户自己把自己的域名绑定我们的提供的AWS服务器。 AWS需要验证证书 上一篇文章中我用php的AcmClient中的requestCertificate方法申请到了证书。 $acmClient new AcmClient([region > us-east-1,version > 2015-12-08,credentials>[/…

Oracle 19c PDB克隆后出现Warning: PDB altered with errors受限模式处理

在进行一次19c PDB克隆过程中&#xff0c;发现克隆结束&#xff0c;在打开后出现了报错&#xff0c;PDB变成受限模式&#xff0c;以下是分析处理过程 09:25:48 SQL> alter pluggable database test1113 open instancesall; Warning: PDB altered with errors. Elapsed: 0…

【3D Slicer】的小白入门使用指南九

定量医学影像临床研究与实践 任务 定量成像教程 定量成像是从医学影像中提取定量测量的过程。 本教程基于两个定量成像的例子构建: - 形态学:缓慢生长肿瘤中的小体积变化 - 功能:鳞状细胞癌中的代谢活动 第1部分:使用变化跟踪模块测量脑膜瘤的小体积变化第2部分:使用PET标…

二、神经网络基础与搭建

神经网络基础 前言一、神经网络1.1 基本概念1.2 工作原理 二、激活函数2.1 sigmoid激活函数2.1.1 公式2.1.2 注意事项 2.2 tanh激活函数2.2.1 公式2.2.2 注意事项 2.3 ReLU激活函数2.3.1 公式2.3.2 注意事项 2.4 SoftMax激活函数2.4.1 公式2.4.2 Softmax的性质2.4.3 Softmax的应…

VMWare虚拟机安装华为欧拉系统

记录一下安装步骤&#xff1a; 1.在vmware中创建一个新的虚拟机&#xff0c;步骤和创建centos差不多 2.启动系统 具体的看下图&#xff1a; 启动虚拟机 耐心等待 等待进度条走完重启系统就完成了

如何进入python交互界面

Python交互模式有两种&#xff1a;图形化的交互模式或者命令行的交互模式。 打开步骤&#xff1a; 首先点击开始菜单。 然后在搜索栏中输入Python&#xff0c;即可看到图形化的交互模式&#xff08;IDLE&#xff08;Python 3.7 64-bit&#xff09;&#xff09;与命令行的交互…

NVR录像机汇聚管理EasyNVR多品牌NVR管理工具视频汇聚技术在智慧安防监控中的应用与优势

随着信息技术的快速发展和数字化时代的到来&#xff0c;安防监控领域也在不断进行技术创新和突破。NVR管理平台EasyNVR作为视频汇聚技术的领先者&#xff0c;凭借其强大的视频处理、汇聚与融合能力&#xff0c;展现出了在安防监控领域巨大的应用潜力和价值。本文将详细介绍Easy…

【STM32】USB 简要驱动软件架构图

STM32 USB 软件架构比较复杂&#xff0c;建议去看 UM 1734 或者 st wiki STM32 USB call graph STM32 USB Device Library files organization Reference [1]: https://wiki.stmicroelectronics.cn/stm32mcu/wiki/Introduction_to_USB_with_STM32 [2]: UM1734

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质

一、直白解释slam与图优化的结合 我从b站上学习理解的这个概念。 视频的大概位置是1个小时以后&#xff0c;在第75min到80min之间。图优化SLAM是怎么一回事。 slam本身是有运动方程的&#xff0c;也就是运动状态递推方程&#xff0c;也就是预测过程。通过t1时刻&#xff0c…

Vue2教程002:Vue指令

文章目录 2、Vue指令2.1 开发者工具2.2 v-html2.3 v-show和v-if2.4 v-else和v-else-if2.5 v-on2.5.1 内联语句2.5.2 methods 2、Vue指令 2.1 开发者工具 通过谷歌应用商店安装&#xff08;需要科学上网&#xff09;通过极简插件安装 2.2 v-html Vue会根据不同的指令&#x…

使用WebSocket技术实现Web应用中的实时数据更新

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用WebSocket技术实现Web应用中的实时数据更新 使用WebSocket技术实现Web应用中的实时数据更新 使用WebSocket技术实现Web应用中…

单片机学习笔记 1. 点亮一个LED灯

把基础的东西都过一下&#xff0c;用来学习记录一下。 目录 1、Keil工程 2、Keil实现代码 3、烧录程序 0、实现的功能 点亮一个LED灯 1、Keil工程 打开Keil&#xff0c;Project----New uVision Project&#xff0c;工程文件命名----OK 选择单片机类型AT89C52&#xff0c;和…

使用Web Animations API实现复杂的网页动画效果

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂…

计算机组成与原理(2) basic of computer architecture

Instruction Set Architecture (ISA) 和 Hardware System Architecture (HSA) 是计算机体系结构中两个重要的层次&#xff0c;它们各自的职责和作用如下&#xff1a; Instruction Set Architecture (ISA) 定义 ISA是指令集体系结构&#xff0c;是硬件和软件之间的接口。它定义…

Python Excel XLS或XLSX转PDF详解:七大实用转换设置

目录 使用工具 Python将Excel文件转换为PDF Python将Excel文件转换为带页码的PDF Python将Excel文件转换为特定页面尺寸的PDF Python将Excel文件转换为PDF并将内容适应到一页 Python将Excel文件转换为PDF/A Python将Excel文件中的工作表转换为单独的PDF Python将Excel工…

【C++】红黑树封装map—set

1 .关联式容器 C中的map是标准模板库&#xff08;STL&#xff09;中的一种关联容器&#xff0c;它存储的是键值对&#xff08;key-value pairs&#xff09;&#xff0c;其中每个键都是唯一的。 键值对&#xff1a; 用来表示具有一一对应关系的一种结构&#xff0c;该结构中一…