声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
1,使用read命令获取用户输入
read命令是Shell脚本中用于从标准输入(通常是键盘)读取数据的一个内置命令。它能够将用户输入的数据赋值给一个或多个变量,从而实现与用户的交互。此外,read命令还支持多种选项来定制输入行为,例如设置提示信息、限制输入字符数、隐藏输入内容等。
read命令的基本形式如下:
read [选项] [变量1] [变量2] …
选项 | 描述 |
-a arrayname | 将输入的字段存储到指定的数组中 |
-d delim | 使用指定的字符作为行的结束标志 |
-e | 启用输入补全功能 |
-i text | 在输入编辑缓冲区中预置文本 |
-n nchars | 定义输入文本的长度,而不是读取整行 |
-N nchars | 定义输入文本的长度,不考虑行分隔符 |
-p prompt | 在输入前打印提示信息 |
-r | 屏蔽反斜杠\,将其作为普通字符处理 |
-s | 静默模式,不在屏幕上显示输入的字符 |
-t timeout | 指定等待输入的秒数 |
read命令的高级用法
除了基本的输入读取外,read命令还支持一些高级用法,例如:
- 读取多行输入:可以通过循环来读取多行输入。
- 读取文件内容:结合cat命令和管道,可以读取文件内容。
- 定时输入:使用-t选项可以设置一个超时时间,如果在这个时间内没有输入,则自动退出。
实例一,获取用户输入并打印
实例二,read命令结合循环来连续获取用户输入
#!/bin/bash
echo "输入 'exit' 来结束程序"
while true; do
read input
if [ "$input" == "exit" ]; then
break
else
echo "你输入的是: $input"
fi
done
echo "程序已结束"
2. 使用select命令创建菜单
select 是 shell 编程中的一个命令,用于创建一个简单的菜单系统。它允许用户从一组选项中选择一个项目,并返回所选项目的索引或值。select 命令通常与 case 语句结合使用,以根据用户的选择执行不同的操作。
select 命令的基本语法如下:
select 变量 in 选项列表
do
命令块
done
- 变量:用于存储用户选择的值。
- 选项列表:一个由空格分隔的字符串列表,表示菜单中的选项。
- 命令块:用户选择后执行的命令块。
实例一,使用 select 命令创建简单菜单
#!/bin/bash
echo "请选择一个选项:"
select choice in "1" "2" "3"
do
case $choice in
"1")
echo "你选择了选项1"
break
;;
"2")
echo "你选择了选项2"
break
;;
"3")
echo "你选择了选项3"
break
;;
*)
echo "无效的选择"
;;
esac
done
- PS3 是一个特殊的 shell 变量,用于定义 select 命令的提示符。
- select choice in "选项1" "选项2" "选项3" "退出":创建一个包含四个选项的菜单。
- case $choice in:根据用户的选择执行相应的命令块。
- break:当用户选择“退出”时,退出 select 循环。
3. 使用dialog工具创建图形化对话框
dialog 是一个可以在Linux终端中创建图形化对话框的工具。它可以与shell脚本结合使用,以创建更友好的用户界面。以下是如何使用 dialog 工具创建各种类型的对话框。
安装dialog
apt-get install dialog
创建对话框
1. 消息框 (Msgbox)
消息框用于显示一条消息,并要求用户点击“OK”按钮确认。
dialog --title "消息框" --msgbox "这是一个消息框示例" 10 30
2. 输入框 (Inputbox)
输入框允许用户输入文本。
dialog --title "输入框" --inputbox "请输入你的名字:" 10 30 2> /tmp/input.txt
用户输入的内容会被重定向到 /tmp/input.txt 文件中。
3. 确认框 (Yes/No Box)
确认框用于显示一个带有“YES”和“NO”按钮的对话框。
dialog --title "确认框" --yesno "这是一个确认框示例" 10 30
4. 菜单 (Menu)
菜单允许用户从一组选项中选择一个项目。
dialog --title "菜单" --menu "请选择一个选项" 15 30 10 \
1 "选项1" \
2 "选项2" \
3 "选项3" \
4 "退出" 2> /tmp/menu.txt
用户选择的选项会被写入 /tmp/menu.txt 文件中。
5. 复选框 (Checklist)
复选框允许用户选择多个选项。
dialog --title "复选框" --checklist "请选择你喜欢的水果" 15 40 5 \
1 "苹果" on \
2 "香蕉" off \
3 "橙子" on \
4 "葡萄" off 2> /tmp/checklist.txt
用户选择的选项会被写入 /tmp/checklist.txt 文件中。
6. 单选框 (Radiolist)
单选框允许用户选择一个选项。
dialog --title "单选框" --radiolist "请选择一个选项" 15 40 5 \
1 "选项1" on \
2 "选项2" off \
3 "选项3" off 2> /tmp/radiolist.txt
用户选择的选项会被写入 /tmp/radiolist.txt 文件中。
实例一:创建一个消息框
#!/bin/bash
dialog --title "消息框" --msgbox "这是一个消息框。" 10 30
dialog --title "输入框" --inputbox "请输入你的名字:" 10 30 2> name.txt
name=$(cat name.txt)
dialog --title "你好" --msgbox "你好,$name!" 10 30
4,条件判断前言:关系运算符
在Shell编程中,关系运算符主要用于比较数值或字符串,以便在条件语句中进行决策。这些运算符在编写条件逻辑时非常有用,例如在if语句或while循环中。
关系运算符概述
以下是常用的关系运算符及其功能说明:
运算符 | 描述 |
-eq | 检测两个数是否相等 |
-ne | 检测两个数是否不相等 |
-gt | 检测左边的数是否大于右边的 |
-lt | 检测左边的数是否小于右边的 |
-ge | 检测左边的数是否大于等于右边的 |
-le | 检测左边的数是否小于等于右边的 |
这些运算符通常用于整数比较。对于字符串比较,有其他专门的运算符。
示例代码
以下是一些使用关系运算符的示例代码:
#!/bin/bash
# 定义两个变量
a=5
b=10
# 使用if语句进行比较
if [ $a -eq $b ]; then
echo "$a 等于 $b"
else
echo "$a 不等于 $b"
fi
if [ $a -gt $b ]; then
echo "$a 大于 $b"
else
echo "$a 不大于 $b"
fi
if [ $a -lt $b ]; then
echo "$a 小于 $b"
else
echo "$a 不小于 $b"
fi
if [ $a -ge $b ]; then
echo "$a 大于等于 $b"
else
echo "$a 不大于等于 $b"
fi
if [ $a -le $b ]; then
echo "$a 小于等于 $b"
else
echo "$a 不小于等于 $b"
fi
注意事项
- 运算符仅适用于数字:关系运算符只能用于数字比较。如果尝试比较非数字字符串,可能会导致错误。
- 空格:在使用关系运算符时,必须在运算符和操作数之间留有空格。例如,[ $a -eq $b ] 是正确的,而 [ $a-$b ] 则会导致语法错误。
- 引号:在某些情况下,特别是当操作数可能是空字符串时,建议使用双引号来保护变量。例如,[ "$a" -eq "$b" ]。
5,条件判断
条件判断的基本语法
在Shell编程中,条件判断通常使用if语句来实现。if语句的基本语法如下:
if [ condition ]; then
# 如果条件为真,执行这里的代码
else
# 如果条件为假,执行这里的代码
fi
常用的条件判断
Shell中常用的条件判断包括文件判断、字符串判断和数值判断。
文件判断
- -e file: 判断文件是否存在。
- -f file: 判断文件是否存在且为普通文件。
- -d dir: 判断目录是否存在。
- -r file: 判断文件是否可读。
- -w file: 判断文件是否可写。
- -x file: 判断文件是否可执行。
字符串判断
- -z string: 判断字符串是否为空。
- -n string: 判断字符串是否非空。
- string1 = string2: 判断两个字符串是否相等。
- string1 != string2: 判断两个字符串是否不相等。
数值判断
- num1 -eq num2: 判断两个数值是否相等。
- num1 -ne num2: 判断两个数值是否不相等。
- num1 -gt num2: 判断num1是否大于num2。
- num1 -lt num2: 判断num1是否小于num2。
- num1 -ge num2: 判断num1是否大于或等于num2。
- num1 -le num2: 判断num1是否小于或等于num2。
多条件判断
在Shell中,可以使用elif来进行多条件判断。语法如下:
if [ condition1 ]; then
# 如果condition1为真,执行这里的代码
elif [ condition2 ]; then
# 如果condition1为假且condition2为真,执行这里的代码
else
# 如果所有条件都为假,执行这里的代码
fi
实例一,条件判断语句使用
#!/bin/bash
FILE="example.txt"
if [ -e "$FILE" ]; then
echo "File exists."
else
echo "File does not exist."
fi
STRING1="Hello"
STRING2="World"
if [ "$STRING1" = "$STRING2" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
NUM1=10
NUM2=20
if [ "$NUM1" -lt "$NUM2" ]; then
echo "NUM1 is less than NUM2."
else
echo "NUM1 is not less than NUM2."
fi
通过这些基本的条件判断,你可以在Shell脚本中实现复杂的逻辑控制。