声明
通过学习 泷羽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