【网络安全】Shell 脚本学习

声明:学习视频来自 b 站 up 主 泷羽 sec,如涉及侵权马上删除文章

声明:本文主要用作技术分享,所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。

脚本创建执行与变量使用

首先进入Linux终端【Windows系统可以使用MobaXterm中的zsh/bash终端】,可以使用 vim 创建一个 .sh 结尾的文件。
在文件的第一行写入下列三种中的其中一种,这些是脚本解释器

  • #!/bin/bash 等是一个特殊的行,称为 shebang(也称为 hashbang)。它出现在脚本文件的第一行。这一行的作用是告诉操作系统应该使用哪个解释器来执行这个脚本。
#!/bin/bash
#!/bin/dash
#!/bin/sh
  • 在许多 Linux 系统中,/bin/sh(传统的 Bourne shell)实际上是指向 /bin/dash 的符号链接。dash(Debian Almquist Shell)是一个轻量级的 shell,它被设计用来提供基本的脚本执行功能,并且在启动速度和资源占用方面有一定的优势。
  • 当一个脚本没有指定解释器(即没有#!/bin/bash 或其他明确的解释器路径的 shebang 行),系统会默认使用 /bin/sh 来解释执行这个脚本。由于 /bin/sh 常常是 /bin/dash 的链接,所以在这种情况下,脚本实际上是由 dash 来执行的。

如果终端安装了 zsh 等其他脚本解释器,可以使用 #!/bin/zsh 来进行解释,或者 依然也可以使用 #!/bin/bash 等,此时执行时,依然会使用 bash 进行脚本解释,zsh 只会充当一个调用的角色。

在执行 .sh 结尾的shell 脚本时,有两种方式:

  1. chmod +x xxx.sh 添加执行权限后,使用 ./xxx.sh 执行
  2. 使用脚本解释器直接执行 sh xxx.sh / bash xxx.sh / zsh xxx.sh
  3. source xxx.sh ,该命令与使用 脚本解释器直接执行效果一致,唯一不同的地方在于该命令会将输出内容进行不同颜色标注。

变量

声明变量 name="d1"
使用变量 echo $name / echo "my name is $name"
如果使用双引号和不使用双引号的效果是一样的,都会将变量进行替换为变量值;
但如果是单引号,就不会对变量进行解析。

变量拼接

echo "my name is $name,and my age is $ageyears old"
上述例子中,变量age和字符串years之间没有空格,因为会导致解析为空,因为没有定义变量,解决办法是 使用 双引号 或 大括号 将变量引起来
echo "my name is $name,and my age is "$age"years old"
echo "my name is $name,and my age is {$age}years old"
但是使用花括号引起来的方式,在输出时,变量内容会被显示在花括号中
以上所述变量均为临时变量,变量由数字、字母和下划线组成,但不能以数字开头,也不能中间存在空格,可以使用下划线代替。

查看定义的变量

如果在终端直接定义变量,那么需要查看定义的变量时,可以使用
set | grep name
删除变量
unset name

永久环境变量和字符串显位

Windows中的环境变量在 path 下添加
which ls 在Linux下查看ls命令所在位置
echo $PATH Linux输出环境变量
查看输出结果存在/usr/bin目录什么意思呢就是当我们执行ls它会帮我们找到对应得目录做一个执行,也就是ls的完整路径应该是/usr/bin/ls脚本

根据上述描述,我们可以直接将我们的脚本添加至环境变量使其可以直接执行:

  1. 将写好的脚本 1.sh 移动到环境变量 /usr/bin 等任意一个目录下,就可以在终端直接执行 1.sh
  2. 将整个目录都添加到环境变量中,这样整个目录下的文件都可以直接执行。例如:将 /root/ 目录添加到环境变量中, /usr/bin:/bin:/usr/bin:/drives/c/windows:/root/
    1. 使用命令 export PATH=/root:$PATH
    2. export 命令是一个用于设置环境变量的关键字,使得设置的变量可以在当前shell以及由该shell启动的子进程中生效。
    3. PATH:这是一个非常重要的环境变量,它定义了系统在哪些目录下去寻找可执行程序。当你在命令行输入一个命令(如Is、cat等)时,系统会根据PATH环境变量所指定的目录顺序去查找对应的可执行文件,找到后就执行它。
    4. /root:$PATH:这里是在重新定义PATH的值。它将/root目录添加到了原有的PATH变量值的最前面(假设原有的PATH值存储在变量PATH中,这里通过:PATH的形式保留了原来的值并添加了新的部分)。这样做的结果是,当系统去查找可执行程序时,会先在/root目录下查找,然后再按照原来PATH所指定的其他目录顺序查找。

永久变量

修改用户配置文件(~/.bashrc~/.bash_profile
- 对于 bash 用户,通常可以在用户主目录下的 ~/.bashrc~/.bash_profile 文件中添加目录到环境变量。如果使用的是 zsh,则是 ~/.zshrc。以 bash 为例,使用文本编辑器(如 vinano)打开 ~/.bashrc 文件。

vi ~/.bashrc
  • 在文件末尾添加以下行(假设要添加 /home/user/permanent_bin 目录):
export PATH=$PATH:/home/user/permanent_bin
  • 保存并退出文件后,要使修改生效,可以在终端中运行 source ~/.bashrc。这样,以后每次打开新的终端会话,/home/user/permanent_bin 目录都会自动添加到 PATH 中。
    修改系统配置文件(全局设置,谨慎操作)
    • 在某些情况下,可能需要为系统的所有用户添加目录到环境变量。这可以通过修改系统级别的配置文件来实现,如 /etc/profile/etc/environment
    • 例如,在 /etc/profile 文件中添加目录路径。使用文本编辑器打开 /etc/profile
vi /etc/profile
  • 找到合适的位置,添加类似以下的内容(假设要添加 /systemwide/bin 目录):
export PATH=$PATH:/systemwide/bin
  • 保存并退出后,这个目录就会被添加到所有用户的环境变量 PATH 中。不过,修改系统配置文件可能会影响整个系统的运行,需要谨慎操作。

字符串相关操作

假设我们想知道一个字符串的长度,比如我们想解析一个字符串的长度我们如何进行实现?
比如 name="D1" age=27 然后我们通过 echo "my name is $name,and i am $age years old" 打印完整字符串

str="hello world"
echo ${
   #str}
输出字符串 str 的长度

echo ${str:0:3}
输出前三个字符

脚本参数传递与数学运算

向脚本程序传递参数如何实现?

echo 执行的文件名是:$0
echo 第一个参数是:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值