红队-shell编程篇(下)

声明

通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章

笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负

一、until循环(until 直到为止)

1.until循环

脚本代码如下:

i=0 #初始化变量i的值为0,可以根据需要修改这个初始值
until [ ! $i -lt 10 ]
do
      echo $i
      ((i++))
done
1.1代码功能概述

这段代码是一个 until循环结构,用于在满足特定条件之前重复执行循环体中的操作。在这里,它会不断地输出变量i的值并对i进行自增操作,直到i的值不满足循环条件为止。

1.2循环条件分析

循环条件部分为 [ ! $i -lt 10 ],这里存在一些问题哦。在bash脚本中,用于条件测试 [] (等同于 test 命令)有其特定的语法规则。

2.case 语句

read -p "请您输入一个数值:" num
case $num in
          1)echo 您输入的数字是1
           ;;
          2)echo 您输入的数字是2
           ;;
          *)echo 您输入的是其他数字
           ;;
esac

以下是对这段代码的详细分析:
代码功能
        这段 bash 脚本代码的主要功能是从用户那里获取输入的一个数值,然后根据输入的值进行不同的处理。如果输入的值是 1,就输出 "您输入的数字是 1" ;如果输入的值是 2,就输出  "您输入的数是 2" ;如果输入的是其他任何值,就输出 "您输入的是其他数字" 。


代码结构及各部分含义
获取用户输入:
        read -p "请您输入一个数值:" num: 这里使用 read 命令来读取用户从键盘输入的内容。-p 选项用于在等待输入之前向用户显示提示信息,在这个例子中,提示信息是 "请您输入一个数值:" ,用户输入的内容会被存储到变量 num 中。


条件判断与处理(case 语句部分):
        case $num in: 这是 bash 中的 case 语句的起始标识,用于根据变量 num 的不同取值来执行不同的代码块
          1)、2)和 *)部分:
                1): 当变量 num 的值等于 1时,会执行这部分代码,即 echo 您输入的数字是1,然后通过 ;; 结束这个分支的执行。
                 2): 同理,当 num 的值等于 2 时,执行 echo 您输入的数字是2,并以 ;;  结束。
                 *):这是一个通配符分支,当 num 的值既不等于 1也不等于 2 时,就会执行这部分代码,即 echo 您输入的是其他数字,最后也以 ;; 结束整个 case 语句。

3.基本函数学习

一个函数我们要怎么创建 要怎么引用
代码如下:

DemoFunc () {
          echo "hello world"
}
DemoFunc



代码功能
这段代码定义了一个名为 DemoFunc 的函数,函数体内部仅包含一条语句,即输出字符串“hello world"。然后通过调用 DemoFunc 来执行这个函数,从而使得 "hello world" 被输出到控制台(假设这是在一个支持函数定义和调用的脚本环境中运行,比如 bash 脚本环境等)。


函数定义部分:
       DemoFunc() {: 这是函数定义的开头部分,声明了函数名为 DemoFunc,后面紧跟着的大括号 { 表示函数体的开始。
       echo "hello world": 这是函数体内部的唯一 一条语句,它的作用是将字符串 "hello world" 输出到控制台。当函数被调用时,这条语句就会被执行。
        }: 这是函数体的结束大括号,标志着 DemoFunc 函数定义的完成。
函数调用部分:
        DemoFunc: 这单独的一行就是对前面定义好的 DemoFunc函数进行调用。当执行到这一行时,就会跳转到 DemoFunc 函数的定义处,执行函数体内部的语句,也就是会输出 "hello world" 到控制台。

代码二:

DemoFunc () {
         echo "hello world"
         echo "My name is $1: "
}
DemoFunc luoyu

代码功能
这段代码定义了一个函数 DemoFunc,然后调用了该函数并传递了参数 luoyu。函数 DemoFunc 的功能是在被调用时,先输出固定的字符串 "hello world",接着输出一个包含参数值的字符串 "My name is $1:",这里的 $1 表示函数接收到的第一个参数。


代码执行过程
函数定义:
         DemoFunc() {: 这部分声明了函数名为 DemoFunc,大括号内是函数体内容。
         echo "hello world": 当函数被调用时,这是函数体中首先执行的语句,会将字符串 "hello world" 输出到控制台。
         echo "My name is $1:" :在输出 "hello world" 之后,会执行这条语句。由于在调用函数 DemoFunc 时传递了参数 luoyu此时 $1 的值就被设置为 luoyu,所以这条语句会输出 "Myname is luoyu:" 。
         }: 结束函数 DemoFunc 的定义。


函数调用:
         DemoFunc luoyu: 这行调用了已经定义好的 DemoFunc 函数,并将参数 luoyu 传递给它。

多函数调用 代码三:

DemoFunc () {
         echo "hello world"
         echo "My name is $1,and my age is $2 years old"
}
DemoFunc luoyu 27

二、不同脚本的互相调用

1.互相调用

首先使用  rm*.sh  删掉所有shell脚本,然后vim 2.sh(新建一个sh脚本文件)  
echo "hello word"
在创建一个 3.sh 脚本文件 vim 3.sh   输入  . 2.sh
bash执行 2.sh 你会发现输出了3.sh的内容

方法二
source 3.sh 写入到 2.sh 中去 就可以了
ok刚刚的例子就很简单 我们接下来演示变量的调用

脚本1如下:
2.sh  设置两个变量

name="xiaohao"
age=23


脚本2:
source 3.sh

echo "My name is $name,and i am $age years old"
bash 3.sh

2.重定向

2.1输出重定向

ls > 1.txt
cat 1.txt

ls指令运行的结果写入了 1.txt文件中

who > 1.txt
cat > 1.txt

从这两个例子得出,可以覆盖原有的内容。我们前面讲过 >> 就可以追加内容
ls >> 1.txt
cat 1.txt

我们把 ls 命令重定向到垃圾桶回收站 它会发生什么呢
ls  > /dev/null
已经执行 但是没有回显

2.2输入重定向

简单的输入重定向示例(一)
假设你有一个文本条件dirs.txt ,里面写着几个目录名称,例如:
/home/user/Documents
/home/user/Pictures
/home/user/Music

         你可以使用Is命令结合输入重定向来查看这些目录下的文件。
在终端输入 Is -l < dirs.txt 。这里的 -l 选项是为了以长格式显示文件信息。


         这个命令会从 dirs.txt 文件中读取目录名称作为 Is -l 命令的输入,然后分别列出这些目录下文件的详细信息,比如文件权限、所有者、大小、修改时间等内容。


简单的输入重定向示例(二)
         假如你有一个文件 subdirs.txt,内容是一个主目录下各个子目录的名字,例如:
subdir1
subdir2
subdir3

         你可以通过以下命令来查看这些子目录中的内容: ls < subdirs.txt
         这样,ls 命令就会从 subdirs.txt 文件中读取每个子目录的名字,并列出这些子目录中的文件和文件夹(如果有)。

3.文件描述符

0 1 2
0: 标准输入
1: 标准输出
2: 错误输出


例子
Is > 8.txt 2>9.txt
如果输出正确 就会输出到 8. txt
cat 8. txt


coo > 8.txt 2> 9.txt
如果输出错误 就会输出到 9. txt
cat 9.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值