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

news2024/11/18 10:18:51

一、永久环境变量

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"* ]]; then
        echo "Found 'World'"
    fi
  • 使用 grep 查找字符串

    text="Hello, World!"
    echo "$text" | grep -q "World"  # 如果找到 "World",返回 0
    if [[ $? -eq 0 ]]; then
        echo "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[@]}"; do
    echo "$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]+$ ]]; then
        echo "It's a number"
    else
        echo "It's not a number"
    fi

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


结语

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统进程管理实验

父子进程 用系统调用fork()函数实现子进程的创建&#xff0c;熟悉进程创建的执行过程。 #include <stdio.h> #include <stdlib.h> #include <unistd.h>int main() {// 打印主进程的 PIDprintf("hello, world (pid: %d)\n", (int)getpid());// 创…

DB Type

P位 p 1时段描述符有效&#xff0c;p 0时段描述符无效 Base Base被分成了三个部分&#xff0c;按照实际拼接即可 G位 如果G 0 说明描述符中Limit的单位是字节&#xff0c;如果是G 1 &#xff0c;那么limit的描述的单位是页也就是4kb S位 S 1 表示代码段或者数据段描…

获取当前程序运行时的栈大小[C语言]

废话前言 一晃已经毕业了4年&#xff0c;也在某个时间点&#xff0c;从面试者转变成了面试官。 进行第一次面试的时候&#xff0c;我好像比候选人还慌张&#xff0c;压根不知道问什么&#xff0c;好在是同行业&#xff0c;看着简历问了一些协议内容以及模块设计思路&#xff0…

新160个crackme - 098-DueList.4

运行分析 需破解Name和Code PE分析 ASM汇编程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida搜索找到关键字符串 ida动态调试&#xff0c;逻辑如上 算法分析 Name concealstr_1 SU7CSJKF09NCSDO9SDF09SDRLVK7809S4NF str_2 A1LSK2DJF4HGP3QWO5EIR6UTYZ8MXN…

ETH钱包地址如何获取 如何购买比特币

首先我们要先注册一个交易所 Gate.io&#xff08;推荐&#xff09;: 点我注册 1、注册很简单&#xff0c;通过手机号就可以进行注册了。 2、获取ETH钱包地址 注册好之后&#xff0c;如图所示&#xff0c;点击“统一账户” 3、通过搜索栏搜索ETH&#xff0c;如下图所示 4、点…

【HOT100第五天】搜索二维矩阵 II,相交链表,反转链表,回文链表

240.搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。每列的元素从上到下升序排列。 先动手写写最简单方法&#xff0c;二重循环。 class Solution { public:bool searchMa…

.NET 9与C# 13革新:新数据类型与语法糖深度解析

记录&#xff08;Record&#xff09;类型 使用方式&#xff1a; public record Person(string FirstName, string LastName); 适用场景&#xff1a;当需要创建不可变的数据结构&#xff0c;且希望自动生成 GetHashCode 和 Equals 方法时。不适用场景&#xff1a;当数据结构需…

冠层四流近似模型的发展历史

1. Kunbelka-Munk theory This is the earlist model using a two-stream approximation d I d z − ( k s ) I s J d J d z ( k s ) J − s I \begin{aligned} &\frac{dI}{dz} -(ks)IsJ\\ &\frac{dJ}{dz} (ks)J - sI \end{aligned} ​dzdI​−(ks)IsJdzdJ​(…

MySQL-关联查询和子查询

目录 一、笛卡尔积 二、表连接 1、内部连接 1.1 等值连接 1.2 非等值连接 2、外部链接 2.1 左外连接-LEFT JOIN 2.2 右外连接-RIGHT JOIN 2.3 全关联-FULL JOIN/UNION 三、子查询 1、嵌套子查询 2、相关子查询 3、insert和select语句添加数据 4、update和select语…

云计算虚拟化-kvm创建虚拟机

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 虚拟化&#xff0c;简单来说就是把一台服务器/PC电脑&#xff0c;虚拟成多台独立的虚拟机&#xff0c;每台虚拟机之间相互隔…

计算机编程中的设计模式及其在简化复杂系统设计中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的…

编程考古-计算机发展(中)

晶体管计算机时代 尽管真空管技术标志着计算机步入了现代化的门槛&#xff0c;但其固有的局限性——庞大的体积、高昂的能耗、频繁的故障以及不菲的成本——极大地阻碍了其普及与实际应用。 晶体管的早期 Point-contact transistor 点接触晶体管 1947年&#xff0c;贝尔实验…

vue2+3 —— Day5/6

自定义指令 自定义指令 需求&#xff1a;当页面加载时&#xff0c;让元素获取焦点&#xff08;一进页面&#xff0c;输入框就获取焦点&#xff09; 常规操作&#xff1a;操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…

报错 No available slot found for the embedding model

报错内容 Server error: 503 - [address0.0.0.0:12781, pid304366] No available slot found for the embedding model. We recommend to launch the embedding model first, and then launch the LLM models. 目前GPU占用情况如下 解决办法: 关闭大模型, 先把 embedding mode…

Maven 构建项目

Maven 是一个项目管理和构建工具&#xff0c;主要用于 Java 项目。它简化了项目的构建、依赖管理、报告生成、发布等一系列工作。 构建自动化&#xff1a;Maven 提供了一套标准化的构建生命周期&#xff0c;包括编译、测试、打包、部署等步骤&#xff0c;通过简单的命令就可以执…

【C++笔记】C++三大特性之多态

【C笔记】C三大特性之多态 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之多态前言一.多态1.1 多态的概念1.2 虚函数1.3 虚函数的重写/覆盖1.4 多态的定义及实现 二.虚函数重写的⼀些其他问题2.1 协变(…

【项目实战】基于 LLaMA-Factory 通过 LoRA 微调 Qwen2

【项目实战】基于 LLaMAFactory 通过 LoRA 微调 Qwen2 一、项目介绍二、环境准备1、环境准备2、安装LLaMa-Factory3、准备模型数据集3.1 模型准备3.2 数据集准备 三、微调1、启动webui2、选择参数3、训练 四、测试五、总结 一、项目介绍 LLaMA-Factory是一个由北京航空航天大学…

内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理

内容占位符 前言 随着我们对HTML和CSS3的学习逐渐深入&#xff0c;相信大家都已经掌握了网页制作的基础知识&#xff0c;包括如何使用HTML标记构建网页结构&#xff0c;以及如何运用CSS样式美化页面。为了进一步巩固和熟练这些技能&#xff0c;今天我们一起来完成一个有趣且实…

SpringSecurity 鉴权认证入门讲解

​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…

【插件】多断言 插件pytest-assume

背景 assert 断言一旦失败&#xff0c;后续的断言不能被执行 有个插件&#xff0c;pytest-assume的插件&#xff0c;可以提供多断言的方式 安装 pip3 install pytest-assume用法 pytest.assume(表达式,f’提示message’) pytest.assume(表达式,f‘提示message’) pytest.ass…