声明!
学习视频来自B站up主 泷羽sec ,有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!
文章为个人学习笔记。
until循环
例子1
创建01.sh
i=0
until [ ! $i -lt 10 ]
do
echo $i
((i++))
done
┌──(root㉿kali)-[~/work]
└─# bash 01.sh
0
1
2
3
4
5
6
7
8
9
-
i=0:初始化变量 i 为 0。这是循环计数器的起始值。
-
until [ ! $i -lt 10 ]:这是一个 until 循环,它会一直执行,直到括号内的测试条件为假。这里的测试条件是 ! $i -lt 10,意味着当 i 不小于 10 时,循环停止。-lt 是小于(less than)的测试运算符。
-
do:这是 until 循环的开始。
-
echo $i:打印变量 i 的当前值。在循环的每次迭代中,这将输出 i 的值。
-
((i++)):这是一个自增表达式,它将 i 的值增加 1。在 Bash 中,(( )) 用于执行算术运算,这里的 i++ 相当于 i = i + 1。
-
done:这是 until 循环的结束。
这段脚本的执行流程如下:
-
初始化 i 为 0。
-
进入 until 循环。
-
打印 i 的值。
-
将 i 的值增加 1。
-
检查 i 是否小于 10,如果是,则继续循环;如果不是,则退出循环。
最终,这段脚本将输出数字 0 到 9,每个数字一行。
case选择语句
例子1
02.sh
read -p "请输入一个数值:" num
case $num in
1)echo 你输入的数字是1
;;
2)echo 你输入的数字是2
;;
*)echo 你输入的是:其他的内容
;;
esac
┌──(root㉿kali)-[~/work]
└─# bash 02.sh
请输入一个数值:1
你输入的数字是1
┌──(root㉿kali)-[~/work]
└─# bash 02.sh
请输入一个数值:2
你输入的数字是2
┌──(root㉿kali)-[~/work]
└─# bash 02.sh
请输入一个数值:4587
你输入的是:其他的内容
┌──(root㉿kali)-[~/work]
└─#
-
read -p "请输入一个数值:" num:这行代码使用 read 命令提示用户输入一个数值。-p 选项允许你指定一个提示信息,该信息会在命令行上显示,告诉用户需要输入什么。用户输入的值将被存储在变量 num 中。
-
case $num in:这行代码开始了 case 语句,它允许你根据变量 num 的值来选择执行不同的代码块。case 语句是条件判断的一种,用于匹配多个可能的值。
-
1)echo 你输入的数字是1 ;;:这是 case 语句的第一个模式。如果 num 的值是 1,那么将执行 echo 命令,输出 "你输入的数字是1"。;; 是 case 语句中每个模式的结束标记。
-
2)echo 你输入的数字是2 ;;:这是 case 语句的第二个模式。如果 num 的值是 2,那么将执行 echo 命令,输出 "你输入的数字是2"。同样以 ;; 结束。
-
*)echo 你输入的是:其他的内容 ;;:这是 case 语句的默认模式。星号 * 是一个通配符,匹配除了前面明确列出的值之外的任何值。如果 num 的值既不是 1 也不是 2,那么将执行 echo 命令,输出 "你输入的是:其他的内容"。这也以 ;; 结束。
-
esac:这是 case 语句的结束标记。
这段脚本的工作流程如下:
-
首先,脚本会提示用户输入一个数值。
-
用户输入数值后,脚本会根据输入的数值匹配 case 语句中的模式。
-
如果用户输入的是 1,脚本会输出 "你输入的数字是1"。
-
如果用户输入的是 2,脚本会输出 "你输入的数字是2"。
-
如果用户输入的是除了 1 和 2 之外的任何值,脚本会输出 "你输入的是:其他的内容"。
这种结构使得脚本能够根据用户的输入做出不同的响应。
函数
例子1
03.sh
DemoFunc() {
echo "hello world"
}
DemoFunc
┌──(root㉿kali)-[~/work]
└─# bash 03.sh
hello world
-
DemoFunc() {:这是函数定义的开始。DemoFunc 是函数的名称,() 表示这是一个函数定义,而 { 表示函数体的开始。
-
echo "hello world":这是函数体内的唯一一条语句。echo 是一个 Bash 命令,用于在终端输出文本。这里的文本是 "hello world",它会被显示在屏幕上。
-
}:这是函数体的结束大括号,标志着 DemoFunc 函数定义的完成。
函数调用部分:
-
DemoFunc:这是对前面定义的 DemoFunc 函数的调用。当脚本执行到这一行时,会执行 DemoFunc 函数体内的代码。
代码功能:
这段代码的功能是定义一个名为 DemoFunc 的函数,该函数的作用是输出字符串 "hello world" 到控制台。然后,通过直接调用函数名 DemoFunc 来执行这个函数,从而在控制台上显示 "hello world"。
执行流程:
-
脚本开始执行。
-
遇到 DemoFunc() 函数定义,Bash 解释器会记录这个函数的定义,但不会立即执行。
-
脚本继续执行,直到遇到 DemoFunc 函数调用。
-
当调用 DemoFunc 时,Bash 解释器会跳转到 DemoFunc 函数的定义处。
-
执行函数体内的 echo "hello world" 命令,将 "hello world" 输出到控制台。
-
函数执行完毕后,控制权返回到调用点,脚本继续执行(如果有更多代码的话)。
注意事项:
-
函数定义和函数调用之间可以有其他代码,但在这个示例中,它们是连续的。
-
函数定义中的大括号 { 和 } 用于界定函数体的开始和结束。
-
函数调用时不需要括号 (),只需要函数名即可。
例子2
DemoFunc(){
echo "hello word"
echo "my name is $1"
}
DemoFunc xiaoyu
┌──(root㉿kali)-[~/work]
└─# vim 03.sh
┌──(root㉿kali)-[~/work]
└─# bash 03.sh
hello word
my name is xiaoyu
┌──(root㉿kali)-[~/work]
└─#
函数定义部分:
-
DemoFunc() {:这是函数定义的开始。DemoFunc 是函数的名称,() 表示这是一个函数定义,而 { 表示函数体的开始。
-
echo "hello word":这是函数体内的第一条语句。echo 是一个 Bash 命令,用于在终端输出文本。这里的文本是 "hello word",它会被显示在屏幕上。
-
echo "my name is $1":这是函数体内的第二条语句。同样使用 echo 命令输出文本,但这次文本中包含了一个变量 $1。在 Bash 脚本中,$1 代表传递给函数的第一个参数。当函数被调用时,$1 会被替换为实际传递的参数值。
-
}:这是函数体的结束大括号,标志着 DemoFunc 函数定义的完成。
函数调用部分:
-
DemoFunc xiaoyu:这是对前面定义的 DemoFunc 函数的调用,并且传递了一个参数 xiaoyu。当脚本执行到这一行时,会执行 DemoFunc 函数体内的代码,并将 xiaoyu 作为参数 $1 传递给函数。
代码功能:
这段代码的功能是定义一个名为 DemoFunc 的函数,该函数的作用是首先输出 "hello word"(应为 "hello world"),然后输出 "my name is" 后跟一个参数值。在调用 DemoFunc xiaoyu 时,"hello word" 会被显示在屏幕上,紧接着是 "my name is xiaoyu"。
执行流程:
-
脚本开始执行。
-
遇到 DemoFunc() 函数定义,Bash 解释器会记录这个函数的定义,但不会立即执行。
-
脚本继续执行,直到遇到 DemoFunc xiaoyu 函数调用。
-
当调用 DemoFunc xiaoyu 时,Bash 解释器会跳转到 DemoFunc 函数的定义处。
-
执行函数体内的 echo "hello word" 命令,将 "hello word" 输出到控制台。
-
然后执行 echo "my name is $1" 命令,将 "my name is" 与参数 xiaoyu 结合,输出 "my name is xiaoyu" 到控制台。
-
函数执行完毕后,控制权返回到调用点,脚本继续执行(如果有更多代码的话)。
注意事项:
-
函数定义中的大括号 { 和 } 用于界定函数体的开始和结束。
-
函数调用时不需要括号 (),只需要函数名和参数。
-
参数 $1、$2 等在函数体内用于接收传递给函数的参数。
例子3
DemoFunc(){
echo "hello world"
echo "my name is $1,and is $2 years old"
}
DemoFunc xiaoyu 27
┌──(root㉿kali)-[~/work]
└─# bash 03.sh
hello world
my name is xiaoyu,and is 27 years old
┌──(root㉿kali)-[~/work]
└─#
函数定义部分:
-
DemoFunc() {:这是函数定义的开始。DemoFunc 是函数的名称,() 表示这是一个函数定义,而 { 表示函数体的开始。
-
echo "hello world":这是函数体内的第一条语句。echo 是一个 Bash 命令,用于在终端输出文本。这里的文本是 "hello world",它会被显示在屏幕上。
-
echo "my name is $1,and is $2 years old":这是函数体内的第二条语句。同样使用 echo 命令输出文本,但这次文本中包含了两个变量 $1 和 $2。在 Bash 脚本中,$1 代表传递给函数的第一个参数,$2 代表第二个参数。当函数被调用时,$1 和 $2 会被替换为实际传递的参数值。
-
}:这是函数体的结束大括号,标志着 DemoFunc 函数定义的完成。
函数调用部分:
-
DemoFunc xiaoyu 27:这是对前面定义的 DemoFunc 函数的调用,并且传递了两个参数 xiaoyu 和 27。当脚本执行到这一行时,会执行 DemoFunc 函数体内的代码,并将 xiaoyu 作为参数 $1,将 27 作为参数 $2 传递给函数。
代码功能:
这段代码的功能是定义一个名为 DemoFunc 的函数,该函数的作用是首先输出 "hello world",然后输出包含两个参数的问候语。在调用 DemoFunc xiaoyu 27 时,首先 "hello world" 会被显示在屏幕上,紧接着是 "my name is xiaoyu,and is 27 years old"。
执行流程:
-
脚本开始执行。
-
遇到 DemoFunc() 函数定义,Bash 解释器会记录这个函数的定义,但不会立即执行。
-
脚本继续执行,直到遇到 DemoFunc xiaoyu 27 函数调用。
-
当调用 DemoFunc xiaoyu 27 时,Bash 解释器会跳转到 DemoFunc 函数的定义处。
-
执行函数体内的 echo "hello world" 命令,将 "hello world" 输出到控制台。
-
然后执行 echo "my name is $1,and is $2 years old" 命令,将 "my name is" 与参数 xiaoyu 结合,以及 "and is" 与参数 27 结合,输出 "my name is xiaoyu,and is 27 years old" 到控制台。
-
函数执行完毕后,控制权返回到调用点,脚本继续执行(如果有更多代码的话)。
注意事项:
-
函数定义中的大括号 { 和 } 用于界定函数体的开始和结束。
-
函数调用时不需要括号 (),只需要函数名和参数。
-
参数 $1、$2 等在函数体内用于接收传递给函数的参数,$1 是第一个参数,$2 是第二个参数,以此类推。