05-5-shell脚本(2)设置环境变量和字符串使用

声明!

学习视频来自B站up主 泷羽sec ,有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!

文章为个人学习笔记。

1、查看和使用环境变量

临时变量与永久变量:

  • 临时变量:在当前会话中有效,关闭终端后消失。

  • 永久变量:在系统配置文件中设置,对所有会话有效。

常见环境变量:

  • ​HOME​:表示当前用户的主目录。例如,root​用户的主目录是/root​。

    ┌──(root㉿kali)-[~]
    └─# echo $PATH 
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
    
    ┌──(root㉿kali)-[~]
    └─# echo $HOME
    /root
    
    

查看ls​命令的路径:

  • 使用which ls​命令可以查看ls​命令的脚本所在路径。这是因为ls​命令在PATH​环境变量中定义的路径中。

    ┌──(root㉿kali)-[~]
    └─# which -a  ls
    ls: aliased to ls --color=auto
    /usr/bin/ls
    /bin/ls
    
    

查看PATH​环境变量:

  • 使用echo $PATH​命令可以查看当前的PATH​环境变量。PATH​变量中包含了多个目录,系统会在这些目录中查找可执行文件。

  • 示例输出:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games​,表示系统会在这些目录中查找可执行文件。

    ┌──(root㉿kali)-[~]
    └─# echo $PATH  
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
    
    

理解PATH​的作用:

  • 当执行ls​命令时,系统会在PATH​中定义的目录中查找ls​可执行文件,并执行它。这就是为什么可以直接执行ls​命令而不需要指定完整路径。

变量

方法(一):放入环境变量的目录中

  • 根据上述方法,可以将自定义的脚本(如1.sh​)直接放入/usr/bin/​目录中,这样在终端中就可以直接执行该脚本,而不需要指定完整路径。

┌──(root㉿kali)-[~/work]
└─# vim 1.sh

┌──(root㉿kali)-[~/work]
└─# ls
1.sh  2.sh  3.sh  exam
                                                                                                                
┌──(root㉿kali)-[~/work]
└─# cat 1.sh
echo longyu.com
                                                                                                                
┌──(root㉿kali)-[~/work]
└─# mv 1.sh /usr/bin/
                                                                                                                
┌──(root㉿kali)-[~/work]
└─# 1.sh
longyu.com
                                                                                                                
┌──(root㉿kali)-[~/work]
└─# ls
2.sh  3.sh  exam
                                                                                                                  

方法(二)临时变量

​export ​ 临时变量

有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置
用户局限:仅对当前用户

修改PATH​环境变量以包含特定的目录,使得该目录下的程序可以直接执行。

通过将/root/​目录添加到PATH​环境变量中,可以让/root/​目录下的文件直接执行。

第一种(可以)
使用export​命令:
  • ​export PATH=/root:$PATH​:这条命令将/root/​目录添加到当前PATH​环境变量的前面。$PATH​表示当前的PATH​环境变量值,这样新的PATH​变量值会在原有的值前面加上/root/​。

  • ​export​命令用于设置环境变量,使得设置的变量可以在当前shell以及由该shell启动的子进程中生效。

    ┌──(root㉿kali)-[~/work]
    └─# export PATH=/root:$PATH
    
    
​PATH​环境变量的重要性:
  • ​PATH​定义了系统在哪些目录下去寻找可执行程序。当你在命令行输入一个命令(如ls​、cat​等)时,系统会根据PATH​环境变量所指定的目录顺序去查找对应的可执行文件,找到后就执行它。

查看PATH​环境变量:
  • ​echo $PATH​:这条命令用于查看当前的PATH​环境变量值,可以看到/root/​目录是否已经被添加到PATH​中。

  • 
    ┌──(root㉿kali)-[~]
    └─# echo $PATH
    /root:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
    
    
/root:$PATH​的含义:
  • 这里通过:PATH​的形式保留了原来的值并添加了新的部分。这样做的结果是,当系统去查找可执行程序时,会先在/root​目录下查找,然后再按照原来PATH​所指定的其他目录顺序查找。

通过修改PATH​环境变量来包含特定的目录,使得该目录下的程序可以直接执行。这是通过使用export​命令来实现的,export​命令可以确保变量的设置对当前shell及其子进程有效。通过这种方式,可以方便地管理哪些目录下的程序可以直接通过命令行执行。

验证

在端口中,2.sh直接运行

┌──(root㉿kali)-[~]
└─# 2.sh
holll,word
           

打开另一个的端口,输入2.sh命令无法实现

第二种(可以)
使用export​命令:

命令export PATH=/root:PATH​的意图是将/root​目录添加到PATH​的最前面,但是这个命令实际上会覆盖掉原来的PATH​值,只留下/root​目录。这意味着,除非/root​目录下有您想要执行的命令,否则您将无法执行其他目录下的命令,因为PATH​不再包含那些目录。

正确的命令应该是使用冒号(:)将新路径添加到现有的PATH​变量后面,如下所示:

export PATH=$PATH:/root
查看PATH​环境变量:
  • ​echo $PATH​:这条命令用于查看当前的PATH​环境变量值,可以看到/root/​目录是否已经被添加到PATH​中。

  • ┌──(root㉿kali)-[~]
    └─# echo $PATH                                          
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/root
    
    
使用命令

使用2.sh命令

┌──(root㉿kali)-[~]
└─# 2.sh
longyu.com

在另一个终端,无法使用2.sh

设置永久环境变量

永久变量:

  • ​export​命令设置的环境变量是临时的,只在当前会话中有效。要使环境变量永久生效,需要将其写入配置文件中。

第一种(不行)

编辑配置文件:

/root目录下:1.sh文件

/root/work/2.sh文件

┌──(root㉿kali)-[~]
└─# vim /root/1.sh 
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# chmod +x 1.sh    
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# ./1.sh
wor1.shh
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# vim /root/work/2.sh
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# ls
1.sh  公共  模板  视频  图片  文档  下载  音乐  桌面  Desktop
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# mkdir work  
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# vim /root/work/2.sh
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# chmod +x /root/work/2.sh
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# /root/work/2.sh
word2.sh
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# 

  • 使用vi .bashrc​命令打开当前用户的.bashrc​文件。.bashrc​是Bash shell的配置文件,用于定义环境变量和其他shell启动时执行的命令。

  • 在.bashrc​文件中添加export PATH=/root:$PATH​,这样每次打开新的终端会话时,/root​目录都会被添加到PATH​环境变量中。

    在根目录下使用命令。

    ┌──(root㉿kali)-[~]
    └─# cd /        
    
    ┌──(root㉿kali)-[/]
    └─# usr/bin/vi .bashrc
    
    

.bashrc文件内容。

export PATH=/root:$PATH
export PATH=$PATH:/root/work

cat命令查看下。

┌──(root㉿kali)-[/]
└─# usr/bin/cat .bashrc
export PATH=/root:$PATH
export PATH=$PATH:/root/work        
使配置生效:
  • 使用source​命令(或者.​命令)来重新加载.bashrc​文件,使新设置的环境变量立即生效。这可以避免关闭并重新打开终端。

  • 命令示例:source .bashrc​或. .bashrc​。

    ┌──(root㉿kali)-[/]
    └─# source usr/bin/ .bashrc
    
    ┌──(root㉿kali)-[/]
    └─# 1.sh
    1.sh:未找到命令
    
    
    
验证设置:
  • 打开一个新的终端窗口,然后使用echo $PATH​命令来检查PATH​环境变量是否包含了/root​目录。

  • 如果/root​目录出现在输出中,说明设置成功。

┌──(root㉿kali)-[/]
└─# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games


验证脚本执行:
  • 如果在/root​目录下有一个可执行脚本1.sh​,可以在新的终端窗口中直接输入1.sh​来执行它,而不需要指定完整的路径。如果脚本能够直接执行,说明PATH​环境变量设置正确。

第二种.bashrc​文件(不可以)

只会影响当前用户。

在Linux系统中修改.bashrc​文件以添加新的环境变量路径的方法。可以用于永久性地修改当前用户的PATH环境变量,使得/root​目录被添加到PATH中。

确认脚本位置和权限
  • 确保脚本2.sh​存在于/root​目录下,且具有可执行权限。

  • 如果没有执行权限,可以使用以下命令来赋予权限:

┌──(root㉿kali)-[~]
└─# chmod +x /root/2.sh


┌──(root㉿kali)-[~]
└─# ls -la
-rwxr-xr-x  1 root root    16 11月15日 10:18 2.sh

修改.bashrc文件
  1. 打开.bashrc文件:
    使用vim​编辑器打开当前用户的.bashrc​文件。这个文件通常位于用户的主目录下,文件名为.bashrc​。使用命令:

    vim ~/.bashrc
    
  2. 添加环境变量:
    在文件的末尾添加以下行:

    export PATH=/root:$PATH
    
    export PATH=$PATH:/root/work
    
    或
    
    export WORK_HOME="/root/work"
    export PATH="$WORK_HOME:$PATH"
    
    

    这行命令的作用是将/root​目录添加到当前用户的PATH环境变量的开头。$PATH​是一个特殊的环境变量,它包含了系统在执行命令时搜索可执行文件的目录列表。

  3. 保存并退出:
    在vim​中,按Esc​键退出编辑模式,输入:wq​保存更改并退出。

生效方法
  1. 重新打开终端:
    关闭当前终端窗口,重新打开一个新的终端窗口。这样,新的.bashrc​配置就会被加载,环境变量也会更新。

  2. 立即生效:
    在当前终端窗口中输入以下命令,使更改立即生效:

    source ~/.bashrc
    

    或者使用.​命令:

    . ~/.bashrc
    
问题报错

问题如下。

┌──(root㉿kali)-[~]
└─# source ~/.bashrc

找不到命令 “shopt”,您的意思是:
  “shout” 命令来自 Debian 软件包 libshout-tools
尝试 apt install <deb name>
找不到命令 “shopt”,您的意思是:
  “shout” 命令来自 Debian 软件包 libshout-tools
尝试 apt install <deb name>
找不到命令 “shopt”,您的意思是:
  “shout” 命令来自 Debian 软件包 libshout-tools
尝试 apt install <deb name>
找不到命令 “shopt”,您的意思是:
  “shout” 命令来自 Debian 软件包 libshout-tools
尝试 apt install <deb name>
complete:未找到命令
complete:未找到命令
complete:未找到命令
complete:未找到命令
complete:未找到命令
complete:未找到命令
complete:未找到命令
complete:未找到命令
complete:未找到命令
_comp_dequote__initialize:unset:2: no such hash table element: 
/usr/share/bash-completion/bash_completion:615: parse error near &'
                                                                                                                                                         
\[\e]0;\u@\h: \w\a\]\[\033[;94m\]┌──(\[\033[1;31m\]\u㉿\h\[\033[;94m\])-[\[\033[0;1m\]\w\[\033[;94m\]]\n\[\033[;94m\]└─\[\033[1;31m\]$\[\033[0m\] 


解决方法和验证:

当前的端口窗口可以

┌──(root㉿kali)-[~]
└─# echo $SHELL      
/usr/bin/zsh
                                                                                                                                                         
┌──(root㉿kali)-[~]
└─# bash             
┌──(root㉿kali)-[~]
└─# source ~/.bashrc
┌──(root㉿kali)-[~]
└─# 2.sh
holll,word

验证脚本执行:
  • 如果在/root​目录下有一个可执行脚本2.sh​,可以在新的终端窗口中直接输入2.sh​来执行它,而不需要指定完整的路径。如果脚本能够直接执行,说明PATH​环境变量设置正确。

┌──(root㉿kali)-[/]
└─# 2.sh
2.sh:未找到命令
有效期限和用户局限
  • 有效期限:永久有效,直到再次修改.bashrc​文件或者系统配置发生变化。

  • 用户局限:这些更改只会影响当前用户。如果需要为所有用户设置环境变量,可能需要编辑/etc/profile​或/etc/environment​文件,或者为每个用户单独设置。

第三种profile(不行)

有效期限:永久有效
用户局限:对所有用户

编辑profile文件:

您使用vim​编辑器打开/etc/profile​文件,这是Linux系统中用于设置环境变量的全局配置文件。

vim source /etc/profile
添加root路径到PATH:
方法1:

在/etc/profile文件中找到设置PATH的行,并添加/root:到该行的开头。这样做可以将/root目录添加到PATH环境变量中,使得可以在任何位置通过命令行调用/root目录下的可执行文件。

export WORK_HOME=/root/work
export PATH=$PATH:$WORK_HOME

或

export PATH=/root:$PATH
或
export PATH=$PATH:/root

这条命令的作用是将/root​目录添加到当前的PATH环境变量前面。$PATH​是一个特殊的环境变量,它包含了系统在执行命令时搜索可执行文件的目录列表。

方法2

/root目录下:1.sh文件

/root/work/2.sh文件

以下是修改后的代码段:

if [ "$(id -u)" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/root/work"
fi
export PATH

请注意,我在PATH变量的末尾添加了:/root​,这样/root​就会被添加到PATH环境变量的末尾。如果想要将/root​添加到PATH的开头,可以这样写:

if [ "$(id -u)" -eq 0 ]; then
  PATH="/root:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/root/work:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
export PATH

生效方法:

系统重启:重启系统会重新加载/etc/profile​文件,从而更新PATH环境变量。

立即生效:如果您不想重启系统,可以通过在终端执行以下命令来立即使更改生效:

source /etc/profile

或者使用.​命令,它的作用与source​相同:

. /etc/profile

这两个命令都会重新加载/etc/profile​文件,更新当前会话的环境变量。

方法一查看:
┌──(root㉿kali)-[~/work]
└─# source /etc/profile
                                                                                                                                                          
# echo $PATH                                                
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.dotnet/tools:/root/work
                                                                                                                                                          
# 2.sh
houll,work
                                                                                                                                                          
# cd work   
cd: 没有那个文件或目录: work
                                                                                                                                                          
# ls
2.sh  exam  s.sh
                                                                                                                                                          
# 2.sh
houll,work
                                                                                                                                                          
# cd /   
                                                                                                                                                          
# 2.sh
houll,work
                                                                                                                                                          
# 

方法二查看:

变量的目录写在第一个if语句PATH中

第一个

/root目录下:1.sh文件

/root/work/2.sh文件

文件会执行:PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root",1.sh文件可以运行。

PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/root/work

2.sh文件bu可以运行。

┌──(root㉿kali)-[~]
└─# source /etc/profile
                                                                                                                        
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root:/root/.dotnet/tools
                                                                                                                        
# 1.sh
work1.sh
                                                                                                                        
# 2.sh
2.sh:未找到命令
                                                                                                                        
# 


第二个

/root目录下:1.sh文件

/root/work/2.sh文件

文件会执行:PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/work",2.sh文件可以运行。

PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/root

1.sh文件不可以运行。

┌──(root㉿kali)-[~]
└─# source /etc/profile
                                                                                                                        
# 1.sh
1.sh:未找到命令
                                                                                                                        
# 2.sh
word2.sh
                                                                                                                        
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/work:/root/.dotnet/tools
                                                                                                                        
# 



验证:

打开新窗口。没有成功

┌──(root㉿kali)-[~]
└─# 2.sh
2.sh:未找到命令
                                                                                                                  
┌──(root㉿kali)-[~]
└─# cd / 
                                                                                                                  
┌──(root㉿kali)-[/]
└─# 2.sh
2.sh:未找到命令
                                                                                                                  
┌──(root㉿kali)-[/]
└─# 

第四种:(可以)

生效方法:系统重启
有效期限:永久有效

通过修改environment文件:
vim /etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"中加入“:/root”

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/root
COMMAND_NOT_FOUND_INSTALL_PROMPT=1
POWERSHELL_UPDATECHECK=

查看:
┌──(root㉿kali)-[~]
└─# echo $PATH        
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/root

验证:

打开新窗口。

┌──(root㉿kali)-[~]
└─# ls
2.sh  公共  模板  视频  图片  文档  下载  音乐  桌面  go  reports  tool  work

┌──(root㉿kali)-[~/work]
└─# 2.sh
hell,word

$PATH 的顺序

​export PATH=$PATH:/root​ 和 export PATH=/root:$PATH​ 这两个命令都用于修改 PATH 环境变量,但它们添加 /root​ 目录到 PATH 的顺序不同,这可能会影响在命令行中执行命令时的搜索顺序。

  1. ​export PATH=$PATH:/root​

    • 这条命令将 /root​ 目录添加到 PATH 环境变量的末尾。这意味着,当您在命令行中输入一个命令时,系统会先在 PATH 中已有的目录列表中搜索该命令,如果找不到,最后才会在 /root​ 目录中搜索。

    例如,如果 /usr/bin​ 在 PATH 中,并且 /usr/bin​ 和 /root​ 目录下都有名为 somecommand​ 的可执行文件,系统会先找到并执行 /usr/bin/somecommand​,而不会执行 /root/somecommand​。

  2. ​export PATH=/root:$PATH​

    • 这条命令将 /root​ 目录添加到 PATH 环境变量的开头。这意味着,当您在命令行中输入一个命令时,系统会先在 /root​ 目录中搜索该命令,然后才会在 PATH 中已有的其他目录中搜索。

    例如,如果 /usr/bin​ 在 PATH 中,并且 /usr/bin​ 和 /root​ 目录下都有名为 somecommand​ 的可执行文件,系统会先找到并执行 /root/somecommand​,而不会执行 /usr/bin/somecommand​。

总结来说,两个命令的主要区别在于搜索命令时的优先级不同。export PATH=/root:$PATH​ 使得 /root​ 目录下的命令具有更高的优先级,而 export PATH=$PATH:/root​ 则保留了原有的搜索顺序,/root​ 目录下的命令具有较低的优先级。在实际使用中,选择哪种方式取决于您希望哪个目录下的命令具有更高的执行优先级。

2、字符串操作

变量使用:

┌──(root㉿kali)-[~]
└─# name="xiaoyu" age="27"

┌──(root㉿kali)-[~]
└─# echo "my name is $name , and my age is $age years old"

my name is xiaoyu , and my age is 27 years old

获取字符串长度:

  • 在Shell脚本中,可以使用${#变量名}​来获取变量的字符串长度。

  • 例如,如果有一个字符串变量str="hello world"​,可以使用echo ${#str}​来打印这个字符串的长度。

┌──(root㉿kali)-[~]
└─# str="hello wolrd"   
                                                                                                                                                        
┌──(root㉿kali)-[~]
└─# echo ${#str}                                      
11

打印完整字符串:

  • 要打印一个字符串变量的完整内容,可以直接使用echo ${变量名}​。

  • 例如,echo ${str}​会打印出hello world​。

┌──(root㉿kali)-[~]
└─# str="hello wolrd"                                   
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# echo ${str}    
hello wolrd
                       

截取字符串的特定部分:

  • 在Shell脚本中,可以使用${变量名:起始位置:长度}​来截取字符串的特定部分。

  • 例如,echo ${str:0:3}​会从字符串str​的第0个位置开始,截取长度为3的子字符串,即hel​。

┌──(root㉿kali)-[~]
└─# echo ${#str:0:3}
3
                                                                                                                                                          
┌──(root㉿kali)-[~]
└─# echo ${str:0:3} 
hel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值