shell脚本(2)
声明:学习视频来自b站up主 泷羽sec,如涉及侵权马上删除文章
感谢泷羽sec 团队的教学
视频地址:shell编程(2)永久环境变量和字符串显位_哔哩哔哩_bilibili
本文主要讲解临时变量和永久变量以及字符串长度截取操作。
一、常见的变量
1. 临时变量与永久变量
- 临时变量:
- 仅在当前会话(shell 会话)或脚本中有效。
- 会话结束后,变量失效。
- 示例:
new_name="TOM" echo $new_name # 输出 TOM
- 永久变量:
- 写入到配置文件(如
.bashrc
或.bash_profile
),在新的会话中仍然有效。 - 示例:
echo 'export my_na="pppp"' >> ~/.bashrc source ~/.bashrc echo $my_na # 输出 pppp
- 写入到配置文件(如
2. 环境变量
-
环境变量的用途:
- 系统通过环境变量存储全局信息(如用户目录、系统路径等)。
- 示例:
echo $HOME # 显示当前用户的家目录,例如 /root echo $PATH # 显示可执行程序的搜索路径
-
环境变量的特点:
$PATH
是最常见的- 示例:
echo $PATH # 输出类似以下内容: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
-
验证命令路径:
-
使用
which
命令查看可执行文件的完整路径:which ls # 输出:/usr/bin/ls
-
系统执行命令时,会根据
$PATH
的值按顺序在每个目录中查找匹配的可执行文件。
-
3. 将临时变量变为永久变量
方法(一):移动脚本到 $PATH
指定的目录
- 将脚本文件移动到
$PATH
中的某个目录(如/usr/bin
):mv 1.sh /usr/bin/
- 之后可以直接通过脚本名运行,而不需要指定路径:
1.sh
方法(二):修改 $PATH
添加自定义目录
-
临时添加目录到
$PATH
:export PATH=/root:$PATH echo $PATH # 查看是否成功添加 /root 到环境变量
-
解释:
export
:用于设置环境变量,使其对当前 shell 和子进程生效。$PATH
:定义系统查找命令的目录顺序。/root:$PATH
:将/root
目录添加到$PATH
的前面。- 当用户运行命令时,系统会先在
/root
中查找,然后在原$PATH
指定的其他目录中查找。
4. 永久添加变量到 $PATH
-
步骤:
- 编辑
~/.bashrc
文件:vi ~/.bashrc # 添加以下内容 export PATH=/root:$PATH
- 使配置文件生效:
source ~/.bashrc
- 编辑
-
验证:
- 新开一个终端窗口,运行
1.sh
验证脚本是否可以直接运行。
- 新开一个终端窗口,运行
二、字符串操作
1. 获取字符串长度
- 使用
${#变量名}
获取字符串长度:str="hello world" echo ${#str} # 输出 11
2. 字符串截取
-
使用
${变量名:起始位置:长度}
截取子字符串:str="hello world" echo ${str:0:5} # 输出 hello echo ${str:6:5} # 输出 world
字符串截取语法
- 格式:
${变量名:起始位置:长度}
变量名
:字符串的变量名。起始位置
:从字符串的哪个位置开始截取,从0
开始计数。长度
:从起始位置开始截取的字符数。
分析
-
echo ${str:0:5}
str="hello world"
。- 起始位置是
0
,从字符串的第一个字符h
开始。 - 截取长度是
5
,包括h、e、l、l、o
。 - 输出结果:
hello
。
-
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
。
- 起始位置是
让我们将字符串 str
按照索引位置标注出来:
索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
字符 | h | e | l | l | o | w | o | r | l | d |
echo ${str:0:5}
截取的是从索引0
开始,长度为5
的字符 →hello
。echo ${str:6:5}
截取的是从索引6
开始,长度为5
的字符 →world
。