九、图形化脚本

news2024/11/14 5:47:03

多年来, shell脚本一直都被认为是枯燥乏味的。但如果你准备在图形化环境中运行脚本时,就未必如此了。有很多与脚本用户交互的方式并不依赖read和echo语句。

9.1 创建文本菜单

创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户了解脚本能做什么和不能做什么。通常菜单脚本会清空显示区域,然后显示可用的选项列表。用户可以按下与每个选项关联的字母或数字来选择选项。shell脚本菜单的核心是case命令。 case命令会根据用户在菜单上的选择来执行特定命令。

9.1.1 创建菜单布局

创建菜单的第一步显然是决定在菜单上显示哪些元素以及想要显示的布局方式。在创建菜单前,通常要先清空显示器上已有的内容。这样就能在干净的、没有干扰的环境中显示菜单了。clear命令用当前终端会话的terminfo数据来清理出现在屏幕上的文本。运行clear命令之后,可以用echo命令来显示菜单元素。默认情况下, echo命令只显示可打印文本字符。在创建菜单项时,非可打印字符通常也很有用,比如制表符和换行符。要在echo命令中包含这些字符,必须用-e选项。因此,命令如下:

[root@kittod ~]# echo -e "1.\tDisplay disk space"
1. Display disk space

这极大地方便了菜单项布局的格式化。只需要几个echo命令,就能创建一个看上去还行的菜单。

[root@kittod ~]# cat menu01.sh
#!/bin/bash

clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1. Display disk space"
echo -e "\t2. Display logged on users"
echo -e "\t3. Display memory usage"
echo -e "\t0. Exit menu\n\n"
echo -en "\t\tEnter option: "

最后一行的-en选项会去掉末尾的换行符。这让菜单看上去更专业一些,光标会一直在行尾等待用户的输入。

创建菜单的最后一步是获取用户输入。这步用read命令。因为我们期望只有单字符输入,所以在read命令中用了-n选项来限制只读取一个字符。这样用户只需要输入一个数字,也不用按回车键:

[root@kittod ~]# cat menu01.sh
#!/bin/bash

clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1. Display disk space"
echo -e "\t2. Display logged on users"
echo -e "\t3. Display memory usage"
echo -e "\t0. Exit menu\n\n"
echo -en "\t\tEnter option: "
read -n 1 option

[root@kittod ~]# bash menu01.sh
   Sys Admin Menu
   1. Display disk space
   2. Display logged on users
   3. Display memory usage
   0. Exit menu
   
   Enter option:

接下来,你需要创建自己的菜单函数。

9.1.2 创建菜单函数

shell脚本菜单选项作为一组独立的函数实现起来更为容易。这样你就能创建出简洁、准确、容易理解的case命令。

要做到这一点,你要为每个菜单选项创建独立的shell函数。创建shell菜单脚本的第一步是决定你希望脚本执行哪些功能,然后将这些功能以函数的形式放在代码中。

[root@kittod ~]# cat menu02.sh
#!/bin.bash 

function menu {
        clear
        echo 
        echo -e "\t\t\tSys admin Menu \n"
        echo -e "\t1. Display disk space"
        echo -e "\t2. Display logged on users"
        echo -e "\t3. Display memory usage"
        echo -e "\t0. Exit menu\n\n"
        echo -en "\t\tEnter option:"
        read -n 1 option
}
menu

这样一来,任何时候你都能调用menu函数来重现菜单。

9.1.3 添加菜单逻辑

现在你已经建好了菜单布局和函数,只需要创建程序逻辑将二者结合起来就行了。前面提到过,这需要用到case命令。case命令应该根据菜单中输入的字符来调用相应的函数。用默认的case命令字符(星号)来处理所有不正确的菜单项是种不错的做法。

下面的代码展示了典型菜单中case命令的用法。

menu
case $option in
0)
   break ;;
1)
   diskspace ;;
2)
   whoseon ;;
3)
   memusage ;;
*)
   clear
   echo "Sorry, wrong selection" ;;
esac

这段代码首先用menu函数清空屏幕并显示菜单。 menu函数中的read命令会一直等待,直到用户在键盘上键入了字符。然后, case命令就会接管余下的处理过程。 case命令会基于返回的字符调用相应的函数。在函数运行结束后, case命令退出。

9.1.4 整合 shell 脚本菜单

现在已经看到了构成shell脚本菜单的各个部分,让我们将它们组合在一起,看看彼此之间是如何协作的。这里是一个完整的菜单脚本的例子。

[root@kittod ~]# cat menu03.sh
#!/bin.bash 

function diskspace {
        clear
        df -k
}
function whoseon {
        clear
        who
}
function memusage {
        clear
        cat /proc/meminfo
}
function menu {
        clear
        echo 
        echo -e "\t\t\tSys admin Menu \n"
        echo -e "\t1. Display disk space"
        echo -e "\t2. Display logged on users"
        echo -e "\t3. Display memory usage"
        echo -e "\t0. Exit menu\n\n"
        echo -en "\t\tEnter option:"
        read -n 1 option
}
while [ 1 ]
do
        menu
        case $option in
                0)
                        break ;;
                1)
                        diskspace ;;
                2)
                        whoseon ;;
                3)
                        memusage ;;
                *)
                        clear
                        echo "Sorry,wrong selection" ;;
        esac
                echo -en "\n\n\t\t\tHit ant key to continue"
                read -n 1 line
done
clear
                                              

这个菜单创建了三个函数,利用常见的命令提取Linux系统的管理信息。它使用while循环来一直菜单,除非用户选择了选项0,这时,它会用break命令来跳出while循环。可以用这个模板创建任何shell脚本菜单界面。它提供了一种跟用户交互的简单途径。

9.1.5 使用 select 命令

创建文本菜单的一半工夫都花在了建立菜单布局和获取用户输入。 bashshell提供了一个很容易上手的小工具,帮助我们自动完成这些工作。

select命令只需要一条命令就可以创建出菜单,然后获取输入的答案并自动处理。 select命令的格式如下

select variable in list
do
   commands
done

list参数是由空格分隔的文本选项列表,这些列表构成了整个菜单。 select命令会将每个列表项显示成一个带编号的选项,然后为选项显示一个由PS3环境变量定义的特殊提示符。

注意:PS1变量补充

[root@kittod ~]# echo $PS1
[\u@\h \W]\$
PS1的常用参数以及含义:
  \d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
  \H :完整的主机名称
  \h :仅取主机名中的第一个名字
  \t :显示时间为24小时格式,如:HH:MM:SS
  \T :显示时间为12小时格式
  \A :显示时间为24小时格式:HH:MM
  \u :当前用户的账号名称
  \v :BASH的版本信息
  \w :完整的工作目录名称
  \W :利用basename取得工作目录名称,只显示最后一个目录名
  \# :下达的第几个命令
  \$ :提示字符,如果是root用户,提示符为 # ,普通用户则为 $
  
颜色设置参数
  在PS1中设置字符颜色的格式为:\[\e[F;Bm\]........\[\e[0m\],其中“F“为字体
颜色,编号为30-37,“B”为背景颜色,编号为40-47,\[\e[0m\]作为颜色设定的结束。
  颜色对照表:
    F B
    30 40 黑色
    31 41 红色
    32 42 绿色
    33 43 黄色
    34 44 蓝色
    35 45 紫红色
       36 46 青蓝色
    37 47 白色
  只需将对应数字套入设置格式中即可。
  比如要设置命令行的格式为绿字黑底(\[\e[32;40m\]),显示当前用户的账号名称
(\u)、主机的第一个名字(\h)、完整的当前工作目录名称(\w)、24小时格式时间(\t),可以
直接在命令行键入如下命令:
# PS1='[\[\e[32;40m\]\u@\h \w \t]$ \[\e[0m\]'
也可以尝试:
# PS1="\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\
[\e[0m\]]\\$ "

如果需要永久保存,保存到用户变量文件中。

注意:PS2变量补充

一个非常长的命令可以通过在末尾加 \ 使其分行显示

PS2多行命令的默认提示符,默认值是 >

[root@kittod ~]# echo \
> ^C
[root@kittod ~]# PS2=">+ "
[root@kittod ~]# echo \
>+

注意:PS3变量补充

你可以像下面示范的那样,用环境变量PS3定制shell脚本的select提示:

没有PS3提示符时候的情况:
[root@kittod ~]# cat ps3.sh
select i in mon tue wed exit
do
   case $i in
     mon) echo "Monday";;
     tue) echo "Tuesday";;
     wed) echo "Wednesday";;
   exit) exit;;
   esac
 done
[root@kittod ~]# bash ps3.sh
1) mon
2) tue
3) wed
4) exit
#? 1
Monday
#? 2
Tuesday
#? 3
Wednesday
#? 4
有PS3提示符的时候的情况:
[root@kittod ~]# cat ps301.sh
PS3="Select a day (1-4): "
select i in mon tue wed exit
do
   case $i in
     mon) echo "Monday";;
     tue) echo "Tuesday";;
     wed) echo "Wednesday";;
     exit) exit;;
   esac
done

[root@kittod ~]# bash ps301.sh
1) mon
2) tue
3) wed
4) exit
Select a day (1-4): 1
Monday
Select a day (1-4): 2
Tuesday
Select a day (1-4): 3
Wednesday
Select a day (1-4): 4

这里有一个select命令的简单示例。

[root@kittod ~]# cat menu04.sh
#!/bin/bash
function diskspace {
   clear
   df -k
}
function whoseon {
   clear
   who
}
function memusage {
   clear
   cat /proc/meminfo
}
PS3="Enter option: "
select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program"
do
   case $option in
   "Exit program")
     break ;;
   "Display disk space")
     diskspace ;;
   "Display logged on users")
     whoseon ;;
   "Display memory usage")
     memusage ;;
   *)
     clear
     echo "Sorry, wrong selection" ;;
   esac
done
clear

select语句中的所有内容必须作为一行出现。这可以从行接续字符中看出。运行这个程序时, 它会自动生成如下菜单。

[root@kittod ~]# bash menu04.sh
1) Display disk space 3) Display memory usage
2) Display logged on users 4) Exit program
Enter option: 1
...

在使用select命令时,记住,存储在变量中的结果值是整个文本字符串而不是跟菜单选项相关联的数字。文本字符串值才是你要在case语句中进行比较的内容。

9.2 创建文本图形脚本

使用文本菜单没错,但在我们的交互脚本中仍然欠缺很多东西,尤其是相比图形化窗口而言。dialog包最早是由Savio Lam创建的一个小巧的工具,现在由Thomas E. Dickey维护。该包能够用ANSI转义控制字符在文本环境中创建标准的窗口对话框。你可以轻而易举地将这些对话框融入自己的shell脚本中,借此与用户进行交互。

检查系统是否安装,如果没有安装则进行安装:

[root@kittod ~]# dnf install dialog

9.2.1 dialog软件包

dialog命令使用命令行参数来决定生成哪种窗口部件( widget)。部件是dialog包中窗口元素类型的术语。

dialog包现在支持下表中的部件类型:

正如在表中看到的,我们可以选择很多不同的部件。只用多花一点工夫,就可以让脚本看起来更专业。

要在命令行上指定某个特定的部件,需使用双破折线格式。

dialog --widget parameters

其中widget是表中的部件名, parameters定义了部件窗口的大小以及部件需要的文本。每个dialog部件都提供了两种形式的输出:

·使用STDERR

·使用退出状态码

可以通过dialog命令的退出状态码来确定用户选择的按钮。如果选择了Yes或OK按钮,dialog命令会返回退出状态码0。如果选择Cancel或No按钮, dialog命令会返回退出状态码1。可以用标准的$?变量来确定dialog部件中具体选择了哪个按钮。

如果部件返回了数据,比如菜单选择,那么dialog命令会将数据发送到STDERR。可以用标准的bash shell方法来将STDERR输出重定向到另一个文件或文件描述符中。

dialog --inputbox "Enter your age:" 10 20 2>age.txt

这个命令会将文本框中输入的文本重定向到age.txt文件中。

[root@kittod ~]# cat age.txt
20[root@kittod ~]#

9.2.2 部件演示

1、消息框
[root@kittod ~]# dialog --title "Testing" --msgbox "This is a test" 10 20

2、yesno 框
[root@kittod ~]# dialog --title "Yes/No" --no-shadow --yesno "Delete the file /tmp/test.txt?" 10 20

3、输入框
[root@kittod ~]# dialog --title "Input your name" --inputbox "Please input your name:" 10 20  2>/tmp/name.txt

[root@kittod ~]# cat /tmp/name.txt
hehe[root@kittod ~]#
4、密码框
[root@kittod ~]# dialog --title "Password" --passwordbox "Please give a password for the new user: " 10 20

这样我们的密码就暴露出来了,不是很不安全,所以通常我们会加上一个安全选项,-- insecure 将每个字符用 * 来显示出来

5、文本框
[root@kittod ~]# dialog --title "The fstab" --textbox /etc/fstab 10 40

6、菜单框
[root@kittod ~]# dialog --title "Pick a choice" --menu "Choose one" 12 35 5 1 "say hello to everyone" 2 "thanks for your support" 3 "exit"

7、文本选择框
[root@kittod ~]# dialog --title "Pick a choice" --fselect /root/ 7 40

8、复选框
格式:
dialog --checklist "Test" height width menu-height tag1 item1 tag2
item2 …

[root@kittod ~]# dialog --backtitle "Checklist" --checklist "Test" 20 50 10 Memory Memory_Size 1 Disk Disk_size 2

9、显示日历
格式:
dialog --calendar "Date" height width day month year

[root@kittod ~]# dialog --title "Calendar" --calendar "Date" 5 50

10、进度框架
dialog --gauge text height width [<percent>]

·固定进度显示

[root@kittod ~]# dialog --title "installtion pro" --gauge "installtion" 10 30 10

·实时动态进度

[root@kittod ~]# for i in {1..100};do echo $i;done | dialog --title "installation pro" --gauge "installtion" 10 30

·编辑到脚本中

[root@kittod ~]# cat gauge01.sh
#!/bin/bash
declare -i PERCENT=0
(
   for I in /etc/*;do
     if [ $PERCENT -le 100 ]; then
         cp -r $I /tmp/test 2> /dev/null
         echo "XXX"
         echo "Copy the file $I ..."
         echo "XXX"
         echo $PERCENT
      fi
      let PERCENT+=1
      sleep 0.1
   done
) | dialog --title "coping" --gauge "starting to copy files..." 6 50 0

11、表单框架
dialog --form text height width formheight [ label y x item y x flen ilen ] ...

其中,

·flen 表示 Field Length,定义了:选定字段中显示的长度

·ilen 表示 Input Length,定义了:输入的数据允许的长度

使用 Up/Down(或 Ctrl - N,Ctrl - P)在使用领域之间移动。使用 Tab 键在窗口之间切换。

[root@kittod ~]# dialog --title "Add a user" --form "please input the
information of new user: " 12 40 4 \
> "Username: " 1 1 "" 1 15 15 0 \
> "Fullname: " 2 1 "" 2 15 15 0 \
> "HomeDir: " 3 1 "" 3 15 15 0 \
> "Shell: " 4 1 "" 4 15 15 0

9.2.3 综合应用实例

[root@kittod ~]# cat dia01.sh
#!/bin/bash

yesno(){
dialog --title "First screen" --backtitle "Test Program" --clear --yesno \
   "Start this test program or not ? \nThis decesion have to make by you. " 16 51
   # yes is 0, no is 1 ,esc is 255
   result=$?
   if [ $result -eq 1 ]; then
     exit 1;
   elif [ $result -eq 255 ]; then
     exit 255;
   fi
 username
}

username(){
 cat /dev/null > /tmp/test.username
 dialog --title "Second screen" --backtitle "Test Program" --clear --inputbox \
     "Please input your username (default: hello) " 16 51 "hello" 2>/tmp/test.username
       result=$?
     if [ $result -eq 1 ]; then
         yesno
     elif [ $result -eq 255 ]; then
       exit 255;
      fi
     password
}

password(){
     cat /dev/null >/tmp/test.password
     dialog --insecure --title "Third screen" --backtitle "Test Program" --clear --passwordbox "Please input your password (default: 12345) " 16 51 "12345" 2>/tmp/test.password
     result=$?
     if [ $result -eq 1 ];then
         username
     elif [ $result -eq 255 ]; then
         exit 255;
     fi
     occupation
}

occupation(){
 cat /dev/null > /tmp/test.occupation
 dialog --title "Forth screen" --backtitle "Test Program" --clear --menu \
     "Please choose your occupation: (default: IT)" 16 51 3 \
     IT "The worst occupation" \
     CEO "The best occupation" \
     Teacher "Not the best or worst" 2> /tmp/test.occupation
 result=$?
 if [ $result -eq 1 ]; then
     password
 elif [ $result -eq 255 ]; then
     exit 255;
 fi
 finish
}

finish(){
 dialog --title "Fifth screen" --backtitle "Test Program" --clear --msgbox \
   "Congratulations! The test program has finished !\n Username:
$(cat /tmp/test.username)\n Password: $(cat /tmp/test.password)\n
Occupation: $(cat /tmp/test.occupation)" 16 51
   result=$?
   if [ $result -eq 1 ]; then
     occupation
     elif [ $result -eq 255 ]; then
       exit 255;
   fi
}

yesno

执行该脚本:

9.3 创建真正图形的脚本

如果想给交互脚本加入更多的图形元素,你可以再进一步。 KDE和GNOME桌面环境都扩展了dialog命令的思路,包含了可以在各自环境下生成X Window图形化部件的命令。

KDE图形化环境默认包含kdialog包。 kdialog包使用kdialog命令在KDE桌面上生成类似于dialog式部件的标准窗口。生成的窗口能跟其他KDE应用窗口很好地融合,不会造成不协调的感觉。这样你就可以直接在shell脚本中创建能够和Windows相媲美的用户界面了。

GNOME图形化环境支持两种流行的可生成标准窗口的包:

·gdialog

·zenity

zenity是大多数GNOME桌面Linux发行版上最常见的包 这个包可以创建真正的基于图形窗口的脚本。我们的操作系统在安装时使用了GNOME图形环境,而在默认环境里,系统已经安装了zenity软件包。所以我们可以使用该软件来创建真正的图形脚本。

9.3.1 基本命令

查看日历

[root@kittod ~]# zenity --calendar 1

查看文件选择

[root@kittod ~]# zenity --file-selection

9.3.2 综合实例

[root@kittod ~]# cat zen01.sh
#!/bin/bash

temp=`mktemp -t temp.XXXXXX`
temp2=`mktemp -t temp.XXXXXX`

function diskspace(){
	df -h > $temp
	zenity --text-info --title "Disk space" --filename=$temp --width 750 --height 10
}

function whoseon(){
	who > $temp
	zenity --text-info --title "Logged in users" --filename=$temp --width 750 --height 10
}

function memusage(){
	cat /proc/meminfo > $temp
	zenity --text-info --title "Memory usage" --filename=$temp --width 750 --height 10
}

while [ 1 ]
do
	zenity --list --radiolist --title "Sys Admin Menu" --column "Select" --column "Menu Item" FALSE "Display disk space" FALSE "Display users" FALSE "Display memory usage" FALSE "Exit" > $temp2
       if [ $? -eq 1 ]
       then 
		break;
       fi
       selection=$(cat $temp2)
case $selection in
	"Display disk space")
		diskspace;;
	"Display users")
		whoseon;;
	"Display memory usage")
		memusage;;
	"Exit")
		break;;
	*)
		zenity --info "Sorry, invalid selection"
	esac
done

由于zenity并不支持菜单对话窗口,我们改用单选列表窗口来作为主菜单,如上所示。该单选列表用了两列,每列都有一个标题:第一列包含用于选择的单选按钮,第二列是选项文本。单选列表也不用选项里的标号。当选定一个选项时,该选项的所有文本都会返回到

STDOUT。这会让case命令的内容丰富一些。必须在case中使用选项的全文本。如果文本中有任何空格,你需要给文本加上引号。

使用zenity包,你可以给GNOME桌面上的交互式shell脚本带来一种Windows式的体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1696136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客NC295 连续子链表最大和【simple 动态规划 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/650b68dfa69d492d92645aecd7da9b21 思路 动态规划动态规划算法通过迭代遍历输入数组&#xff0c;维护一个额外的数组 dp 来记录截止到每个位置的最大连续子数组和&#xff0c;并利用一个变量 max_num 实时更新全…

面向可复用性和可维护性的设计模式 课程学习总结

什么是设计模式 设计模式&#xff1a;在软件设计中给定上下文中常见问题的通用的、可重用的解决方案。 设计模式分类 1. 创建型模式——Creational patterns 关注对象创建的过程 1.1 工厂方法模式 定义用于创建对象的接口&#xff0c;但让子类决定要实例化哪个类。工厂方…

swift中json和字典Dict或者数组相互转换,JSONSerialization的强大使用

在Swift中&#xff0c;你可以使用JSONSerialization类将JSON字符串转换为字典。要将 Swift 字典转换为 JSON 字符串&#xff0c;我们可以使用JSONSerialization类的data(withJSONObject:options:)方法。这个方法将字典转换为二进制数据&#xff0c;然后我们可以使用String(data…

Leetcode 环形链表|| 快慢指针解法

但是我们不知道 aaa 的值&#xff0c;该怎么办&#xff1f;依然是使用双指针法。考虑构建一个指针&#xff0c;此指针需要有以下性质&#xff1a;此指针和 slow 一起向前走 a 步后&#xff0c;两者在入口节点重合。那么从哪里走到入口节点需要 aaa 步&#xff1f;答案是链表头节…

SAP-CO成本控制概念之标准成本

“ 本篇介绍&#xff1a;标准成本的会计概念&#xff0c;标准成本的制定标准&#xff1b;通过结合会计标准成本的概念与SAP CO标准成本估算功能&#xff0c;更具象化的了解SAP如何实现标准成本管理&#xff0c;为后续学习SAP实际成本核算打下基础。” 01 — 背景需求 SAP实施…

【C++】深入解析C++智能指针:从auto_ptr到unique_ptr与shared_ptr

文章目录 前言&#xff1a;1. 智能指针的使用及原理2. C 98 标准库中的 auto_ptr:3. C 11 中的智能指针循环引用&#xff1a;shared_ptr 定制删除器 4. 内存泄漏总结&#xff1a; 前言&#xff1a; 随着C语言的发展&#xff0c;智能指针作为现代C编程中管理动态分配内存的一种…

infoq读书笔记-云原生时代,如何建设稳定性可观测体系?

而可观测性则是把Log、Trace、Metric拧成了一股绳&#xff0c;让三大支柱互相之间建立亲密的“血缘关系”&#xff0c;通过这种关系我们可以结构化的从整体到局部再到具体细节的观测业务&#xff1a; 图片来自网络如果把业务系统比作一座海上的冰山&#xff0c;监控仅能看到的…

02_前端三大件HTML

文章目录 HTML用于网页结构搭建1. 标签2. 客户端服务器交互流程3. 专业词汇4. html语法细节5. 安装VSCODE安装插件6. Live Server插件使用7. 标题&段落&换行&列表8. 超链接标签使用9. 图片10. 表格的写法11. 表单标签*(重点)12. 下拉框13. 页面布局标签14. 块元素和…

机器学习大模型驱动:未来的趋势与应用

文章目录 &#x1f4d1;前言一、什么是机器学习大模型&#xff1f;1.1 大模型的特点1.2 大模型的技术基础 二、大模型的技术实现2.1 Transformer 架构2.2 预训练和微调2.3 模型并行和数据并行 三、大模型的应用场景3.1 自然语言处理&#xff08;NLP&#xff09;3.2 计算机视觉&…

02324 自学考试 离散数学屈婉玲教材 目录

02324 自学考试 离散数学屈婉玲教材 目录 02324 自学考试 离散数学屈婉玲教材 02324离散数学全程班历年真题资料

21.2zabbix低级自动发现-mysql多实例

配置mysql多实例 注释&#xff1a;自动发现&#xff1a;创建监控主机&#xff1b;低级自动发现&#xff1a;创建监控项 mysql单实例是直接yum安装&#xff0c;开启mysql多实例 准备配置文件 #mysql3307实例 cp /etc/my.cnf /etc/my3307.cnf vim /etc/my3307.cnf [mysqld] dat…

Maven多环境打包配置

一、启动时指定环境配置文件 在启动springboot应用的jar包时&#xff0c;我们可以指定配置文件&#xff0c;通常把配置文件上传到linux服务器对应jar包的同级目录&#xff0c;或者统一的配置文件存放目录 java -jar your-app.jar --spring.config.location/opt/softs/applicat…

4.Redis之Redis的通用命令

0.Redis 实战操作 通过 redis-cli 客户端和 redis 服务器交互 涉及到很多的 redis 的命令 【redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习) 2.学会使用 redis 的文档-> 阅读文档, 是程序猿的基操!! redis 的命令非常非常多!!! 1.掌握常用命令(多操作多练习…

Golang文件操作

文章目录 文件操作基本介绍普通的文件操作方式&#xff08;os包&#xff09;带缓冲的文件操作方式&#xff08;bufio包&#xff09;文件拷贝操作&#xff08;io包&#xff09; 命令行参数基本介绍解析命令行参数&#xff08;flag包&#xff09; JSON基本介绍JSON序列化JSON反序…

【手把手带你搓组件库】从零开始实现Element Plus

从零开始实现Element Plus 前言亮点项目搭建1、创建项目初始化monorepo创建 .gitignore目录结构安装基础依赖配置文件创建各个分包入口utilscomponentscoreplaytheme 2、创建VitePress文档3、部署到Github Actions生成 GH_TOKENGitHub Page 演示 4、总结 前言 在本文中&#xf…

vim操作手册

vim分为插入模式、命令模式、底行模式。 插入模式&#xff1a;编辑模式 命令模式&#xff1a;允许使用者通过命令&#xff0c;来进行文本的编辑控制 底行模式&#xff1a;用来进行让vim进行包括但不限于shell进行交互 w&#xff1a;保存 wq&am…

北邮22级信通院DSP:用C++程序实现给定参数下四种滤波器的Butterworth模拟滤波器设计:给定上下截频和衰减系数求H(p)和H(s)

北邮22信通一枚~ 跟随课程进度更新北邮信通院DSP的笔记、代码和文章&#xff0c;欢迎关注~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院DSP_青山入墨雨如画的博客-CSDN博客 目录 一、 核心算法 1.1判断滤波器类型 1.2 带通滤波器BP 1.3带阻滤波器B…

十二、shell编程之awk

12.1 什么是awk 虽然sed编辑器是非常方便自动修改文本文件的工具&#xff0c;但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具&#xff0c;它能提供一个类编程环境来修改和重新组织文件中的数据。这正是awk能够做到的。 awk程序是Unix中的原始awk程序的…

P4097 【模板】李超线段树 / [HEOI2013] Segment 题解

题意 有一个平面直角坐标系&#xff0c;总共 n n n 个操作&#xff0c;每个操作有两种&#xff1a; 给定正整数 x 0 , y 0 , x 1 , y 1 x_0,y_0,x_1,y_1 x0​,y0​,x1​,y1​ 表示一条线段的两个端点。你需要在平面上加入这一条线段&#xff0c;第 i i i 条被插入的线段的标…

【面试干货】完全平方数

【面试干货】完全平方数 1、实现思想2、代码实现 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 一个整数&#xff0c;它加上 100 后是一个完全平方数&#xff0c;再加上 168 又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; 1、…