shell脚本2---清风

声明:

本文的学习内容来源于B站up主"泷羽sec"视频"蓝队基础之网络七层杀伤链"的公开分享,所有内容仅限于网络安全技术的交流学习,不涉及任何侵犯版权或其他侵权意图。如有任何侵权问题,请联系本人,我将立即删除相关内容。

本文旨在帮助网络安全爱好者提升自身安全技能,并严格遵守国家法律法规。任何人利用本文中的信息从事违法活动,均与本文作者和"泷羽sec"无关。请读者自觉遵纪守法,合理合法使用相关知识。

一、常见的变量

  1. 临时变量与永久变量

    临时变量: 仅在当前会话(shell 会话)或脚本中有效。 会话结束后,变量失效。 示例:

    复制代码
    name="xiaoyu" echo $name # 输出xiaoyu

    永久变量: 写入到配置文件(如 .bashrc 或 .bash_profile),在新的会话中仍然有效。 示例:

    复制代码
        echo 'export my_na="pppp"' >> ~/.bashrc 
        source ~/.bashrc 
        echo $my_na # 输出 pppp

环境变量1

环境变量的用途: 系统通过环境变量存储全局信息(如用户目录、系统路径等)。 示例:

复制代码
    echo $HOME # 显示当前用户的家目录,例如 /root 
    echo $PATH # 显示可执行程序的搜索路径

PATH:这是一个非常重要的环境变量,它定义了系统在哪些目录下去寻找可执行程序。当你在命令行输入个命令(如ls、cat等)时,系统会根据PATH环境变量所指定的目录顺序去查找对应的可执行文件,找到后就执行它

验证命令路径:

复制代码
使用 which 命令查看可执行文件的完整路径:
​
which ls # 输出:/usr/bin/ls
​
系统执行命令时,会根据 $PATH 的值按顺序在每个目录中查找匹配的可执行文件。
  1. 将临时变量变为永久变量

  2. 方法(一):移动脚本到 $PATH 指定的目录

  3. 将脚本文件移动到 $PATH 中的某个目录(如 /usr/bin):

    mv 1.sh /usr/bin/

  4. 之后可以直接通过脚本名运行,而不需要指定路径(注意这里需要对文件的权限进行修改,文件需要有可执行条件才能够运行):

    1.sh

方法(二):修改 $PATH 添加自定义目录

复制代码
临时添加目录到 $PATH:
​

    export PATH=/root:$PATH 
    echo $PATH # 查看是否成功添加 /root 到环境变量

​

解释:
​
export:用于设置环境变量,使其对当前 shell 和子进程生效。
$PATH:定义系统查找命令的目录顺序。
/root:$PATH:将 /root 目录添加到 $PATH 的前面。
当用户运行命令时,系统会先在 /root 中查找,然后在原 $PATH 指定的其他目录中查找。
  1. 永久添加变量到 $PATH

    步骤: 编辑 ~/.bashrc 文件:

    复制代码
        vi ~/.bashrc
        # 添加以下内容
        export PATH=/root:$PATH
    ​
    使配置文件生效:
    ​
    source ~/.bashrc

    验证: 新开一个终端窗口,运行 1.sh 验证脚本是否可以直接运行。

二、查看命令脚本路径

查看命令脚本路径,当which ls不能查看时,使用which --a ls。其他命令脚本路径同理

which --a ls

which net

三、字符串操作

  1. 获取字符串长度

    使用 ${#变量名} 获取字符串长度:

    复制代码
    str="hello world" 
    echo ${str}  #输出hello world
    echo ${#str} # 输出 11
  2. 字符串截取

    使用 ${变量名:起始位置:长度} 截取子字符串:

    复制代码
    str="hello world" 
    echo ${str:0:4} # 输出 hell
    echo ${str:6:5} # 输出 world

字符串截取语法

复制代码
格式:${变量名:起始位置:长度}
    变量名:字符串的变量名。
    起始位置:从字符串的哪个位置开始截取,从 0 开始计数。
    长度:从起始位置开始截取的字符数。

分析

复制代码
echo ${str:0:5}
    str="hello world"。
    起始位置是 0,从字符串的第一个字符 h 开始。
    截取长度是 4,包括 h、e、l、l。
    输出结果:hell。
​
echo ${str:6:5}
    起始位置是 6,从字符串的第 7 个字符开始(索引从 0 开始)。
    第 6 位对应的是 w(字符串索引:h=0, e=1, l=2, l=3, o=4, 空格=5, w=6)。
    截取长度是 5,包括 w、o、r、l、d。
    输出结果:world。
复制代码
echo ${str:0:5} 截取的是从索引 0 开始,长度为 5 的字符 → hello。
echo ${str:6:5} 截取的是从索引 6 开始,长度为 5 的字符 → world。
相关推荐
大面积秃头8 分钟前
Http基础协议和解析
网络·网络协议·http
骥龙1 小时前
2.8、权限的终极目标:提权与持久化
安全·网络安全
我也要当昏君2 小时前
6.3 文件传输协议 (答案见原书 P277)
网络
Greedy Alg2 小时前
Socket编程学习记录
网络·websocket·学习
刘逸潇20053 小时前
FastAPI(二)——请求与响应
网络·python·fastapi
Mongnewer4 小时前
通过虚拟串口和网络UDP进行数据收发的Delphi7, Lazarus, VB6和VisualFreeBasic实践
网络
我也要当昏君4 小时前
6.5 万维网(答案见原书P294)
网络
嶔某4 小时前
网络:传输层协议UDP和TCP
网络·tcp/ip·udp
文火冰糖的硅基工坊5 小时前
[嵌入式系统-154]:各种工业现场总线比较
网络·自动驾驶·硬件架构
以己之5 小时前
详解TCP(详细版)
java·网络·tcp/ip