【OSCP官方视频】五、Bash编程

bash是一个包含一系列命令的纯文本文件,通常以.sh结尾,执行前必须有可执行权限。

变量

跟编程很像,声明直接声明A=SB,调用的时候加一个$就行:echo '我是$A'

声明的变脸如果有空格,要用引号包起来

可以通过$()执行命令:user=$(whoami),这样运行echo $user会直接显示用户名

参数

在 Bash 编程中,你可以通过使用特定的变量来获取传递给脚本或函数的参数。这些特定的变量是:

  1. $0:表示脚本或函数的名称。
  2. **$1, $2, $3, ...**:表示传递给脚本或函数的位置参数,其中 $1 表示第一个参数,$2 表示第二个参数,以此类推。
  3. $@:表示传递给脚本或函数的所有位置参数的列表。
  4. $#:表示传递给脚本或函数的位置参数的个数。

以下是一个简单的例子,演示了如何在 Bash 脚本中获取和使用这些参数:

#!/bin/bash

echo "The name of the script is: $0"
echo "The first parameter is: $1"
echo "The second parameter is: $2"
echo "All parameters are: $@"
echo "The number of parameters is: $#"

假设你将上述脚本保存为 script.sh,然后在命令行中执行以下命令:

./script.sh hello world

那么,脚本将会输出:

The name of the script is: ./script.sh
The first parameter is: hello
The second parameter is: world
All parameters are: hello world
The number of parameters is: 2

用户输入

可以通过read读取用户输入

read -p 'Username:' username
read -sp 'Pssword:' password

echo "Username:$username,Password:$password"

-p指定提示词,-s采取静默模式,输入的时候不会进行任何显示。

判断

在 Bash 编程中,判断是非常重要的,可以帮助你根据条件执行不同的操作。在 Bash 中,主要用到以下几种判断结构:

  1. if 语句:用于在条件为真时执行特定的代码块。
  2. elif 语句:用于在前一个条件不满足时检查下一个条件。
  3. else 语句:用于在所有条件均不满足时执行特定的代码块。
  4. test 命令 或方括号 [ ]:用于测试条件是否为真。
  5. 逻辑运算符:如 -eq (等于), -ne (不等于), -lt (小于), -gt (大于), -le (小于等于), -ge (大于等于), -z (空字符串) 等。

以下是一个简单的例子,演示了如何在 Bash 脚本中使用 if-elif-else 结构进行条件判断:

#!/bin/bash

echo "Enter a number:"
read num

if [ $num -eq 0 ]; then
    echo "The number is zero."
elif [ $num -gt 0 ]; then
    echo "The number is positive."
else
    echo "The number is negative."
fi

在这个例子中,用户输入一个数字,然后脚本根据数字的正负情况输出不同的消息。

另外,你也可以使用逻辑运算符来结合多个条件进行判断。例如:

#!/bin/bash

echo "Enter your age:"
read age

if [ $age -ge 18 ] && [ $age -le 60 ]; then
    echo "You are an adult."
elif [ $age -lt 18 ] || [ $age -gt 60 ]; then
    echo "You are either a minor or a senior."
else
    echo "Invalid age."
fi

在这个例子中,根据用户输入的年龄判断其是成年人、未成年人还是老年人。

布尔逻辑运算符

andor&&||

这个没什么好讲的==、

循环

在 Bash 编程中,循环结构用于多次执行一段代码块,直到满足某个条件为止。Bash 支持以下几种循环结构:

  1. for 循环:用于遍历一个列表中的元素,执行相同的操作。
  2. while 循环:在条件为真时重复执行一段代码块。
  3. until 循环:在条件为假时重复执行一段代码块。

以下是这几种循环结构的简单示例:

1. for 循环:

#!/bin/bash

for i in {1..5}; do
    echo "Count: $i"
done

这个例子中的 for 循环将会打印出 1 到 5 的数字。

2. while 循环:

#!/bin/bash

count=1

while [ $count -le 5 ]; do
    echo "Count: $count"
    ((count++))
done

这个例子中的 while 循环将会打印出 1 到 5 的数字,与 for 循环相同。

3. until 循环:

#!/bin/bash

count=1

until [ $count -gt 5 ]; do
    echo "Count: $count"
    ((count++))
done

这个例子中的 until 循环也将会打印出 1 到 5 的数字,与 while 循环的例子相似。

在 Bash 编程中,双括号 (()) 通常用于进行数学运算和比较操作。双括号内部可以包含变量、常量和数学运算符,可以执行诸如加法、减法、乘法、除法等数学运算,并且支持比较操作。

下面是一些使用双括号进行数学运算和比较的示例:

数学运算:

#!/bin/bash

a=5
b=3
((sum = a + b))
echo "Sum: $sum"

在这个例子中,双括号内的表达式 ((sum = a + b)) 执行了 a + b 的数学运算,并将结果赋值给变量 sum

比较操作:

#!/bin/bash

a=5
b=3
if ((a > b)); then
    echo "$a is greater than $b"
fi

在这个例子中,双括号内的条件 (a > b) 执行了 a 是否大于 b 的比较操作。

双括号内部支持的数学运算和比较操作更加灵活和方便,相比单括号的方式更易读且更直观。

函数

在 Bash 脚本中,函数用于封装一段可重复使用的代码,使得代码更加模块化和易于维护。定义函数的语法如下:

function_name() {
    # 函数内部的代码
    # 可以包含任意 Bash 语句和命令
}

以下是一个简单的函数示例:

#!/bin/bash

# 定义一个名为 greet 的函数
greet() {
    echo "Hello, welcome to the Bash world!"
}

# 调用 greet 函数
greet

在这个示例中,我们定义了一个名为 greet 的函数,函数内部的代码只是简单地打印一条问候语。然后我们调用了这个函数,程序会输出 "Hello, welcome to the Bash world!"。

函数也可以接收参数,用于传递数据给函数。下面是一个带参数的函数示例:

#!/bin/bash

# 定义一个名为 greet 的函数,接收一个参数
greet() {
    name=$1
    echo "Hello, $name! Welcome to the Bash world!"
}

# 调用 greet 函数并传入参数
greet "John"

在这个示例中,我们定义了一个带有参数的 greet 函数,它接收一个名为 name 的参数,然后在问候语中使用这个参数。当我们调用 greet 函数时,传入了 "John" 作为参数,程序会输出 "Hello, John! Welcome to the Bash world!"。

$?是一个特殊的变量,代表上一个执行函数的返回状态,成功为0,可以通过return指定。

作用域

local,就是和编程一样的用法==、

实例

就是用之前讲到的流编辑器提取需要的睡觉,然后循环读取,进行下一步操作。

评论区
头像
文章目录