Shell 脚本中基于菜单的选择
Menu based selection in Shell scripting
我有一个 Shell 脚本可以在一个菜单中完成 4 个任务。
到目前为止,我的代码(我猜是基本代码)没有菜单。我希望它在开始时添加菜单,并且我尝试了很多方法(使用 case 语句、if else 和 while 循环)。什么都没有解决。
#!/bin/bash
cd /
echo "1. Basic Details"
echo "2. CPU Information"
echo "3. Network information"
echo "4. All"
echo "5. Cancel"
read option
if [ $option -eq 1 ];then
echo ">>>>> Server Name, Date, UPtime <<<<<"
echo "====================================="
echo "Date :- `date`"
echo " "
echo "Host Name :- `hostname`"
echo " "
echo " OS Version"
oslevel -g
echo " "
echo " UPTIME :- "
uptime
echo " "
echo " "
elif [ $option -eq 2 ];then
echo ">>>>> CPU and Memory Info. <<<<<"
echo "====================================="
echo " "
echo
echo " CPU :- `lsdev | grep Processor | wc -l`"
echo " "
echo " Memory :- `lsattr -El mem0 | tail -1`"
echo " "
echo " "
echo "====================================="
echo ">>>>> Important Kernel Params. <<<<<"
echo "====================================="
echo " "
echo "****************************************"
echo " "
lsattr -El aio0
elif [ $option -eq 3 ];then
echo ">>>>> Memory Usage Information <<<<<"
um=`svmon -G | head -2|tail -1| awk {'print '}`
um=`expr $um / 256`
tm=`lsattr -El sys0 -a realmem | awk {'print '}`
tm=`expr $tm / 1024`
fm=`expr $tm - $um`
ump=`expr $um \* 100`
ump=`expr $ump / $tm`
echo " "
echo "Memory Used :- "$ump"%"
echo " "
echo "----------------------";
echo "Memory Information\n";
echo "total memory = $tm MB"
echo "free memory = $fm MB"
echo "used memory = $um MB"
echo "-----------------------\n";
echo " "
echo " "
else
echo "Enter correct option"
fi
请提出更正建议。没有在脚本中添加选项 4(我需要它来显示所有信息)
这更像是代码审查。
- 对于菜单,使用
select
- 使用函数封装功能
- 将您的代码粘贴到 http://www.shellcheck.net
#!/bin/bash
main() {
cd /
PS3="Enter a choice: "
select ch in "Basic Details" "CPU Information" "Network Information" All Cancel
do
case $ch in
"Basic Details")
basicDetails
;;
"CPU Information")
cpuInfo
;;
"Network Information")
memUsage # you need to fix the menu text
;;
All)
basicDetails
cpuInfo
memUsage
;;
Cancel)
break
;;
esac
done
}
basicDetails() {
echo ">>>>> Server Name, Date, UPtime <<<<<"
echo "====================================="
echo "Date :- $(date)"
echo " "
echo "Host Name :- $(hostname)"
echo " "
echo " OS Version"
oslevel -g
echo " "
echo " UPTIME :- "
uptime
echo " "
echo " "
}
cpuInfo() {
echo ">>>>> CPU and Memory Info. <<<<<"
echo "====================================="
echo " "
echo
echo " CPU :- $(lsdev | grep -c Processor)"
echo " "
echo " Memory :- $(lsattr -El mem0 | tail -1)"
echo " "
echo " "
echo "====================================="
echo ">>>>> Important Kernel Params. <<<<<"
echo "====================================="
echo " "
echo "****************************************"
echo " "
lsattr -El aio0
}
memUsage() {
echo ">>>>> Memory Usage Information <<<<<"
um=$(svmon -G | head -2|tail -1| awk '{print }')
um=$(( um / 256 ))
tm=$(lsattr -El sys0 -a realmem | awk '{print }')
tm=$(( tm / 1024 ))
fm=$(( tm - um ))
ump=$(( um * 100 / tm ))
echo " "
echo "Memory Used :- $ump%"
echo " "
echo "----------------------"
echo "Memory Information"
echo
echo "total memory = $tm MB"
echo "free memory = $fm MB"
echo "used memory = $um MB"
echo "-----------------------"
echo
echo " "
echo " "
}
main "$@"
我很不明白"add the menu at start",在你的脚本中,菜单是最先打印出来的语句。这是重复菜单的示例,其中退出程序取决于用户输入
#!/bin/sh
#method to just print your menu
printmenu() {
echo "1. Operation 1"
echo "2. Operation 2"
echo "3. Exit"
}
operation1() {
echo "Operation 1 is performed..!"
}
operation2() {
echo "Operation 2 is performed..!"
}
while [ 1 ]
do
printmenu # printing menu
read u_option
#case handling the user inputs
case $u_option in
1) operation1;; # calling function for operation1
2) operation2;; # calling function for operation2
3) echo "Terminating the program as per your request"
exit;;
*) echo "Invalid option, provide only valid integers"
esac
done
bash 具有 select
内置:
select val in cherry banana apple ; do
echo "$val"
# do other things with $val
# ...
break # Leave this out if you want to run
# the menu forever in an endless loop
done
我有一个 Shell 脚本可以在一个菜单中完成 4 个任务。 到目前为止,我的代码(我猜是基本代码)没有菜单。我希望它在开始时添加菜单,并且我尝试了很多方法(使用 case 语句、if else 和 while 循环)。什么都没有解决。
#!/bin/bash
cd /
echo "1. Basic Details"
echo "2. CPU Information"
echo "3. Network information"
echo "4. All"
echo "5. Cancel"
read option
if [ $option -eq 1 ];then
echo ">>>>> Server Name, Date, UPtime <<<<<"
echo "====================================="
echo "Date :- `date`"
echo " "
echo "Host Name :- `hostname`"
echo " "
echo " OS Version"
oslevel -g
echo " "
echo " UPTIME :- "
uptime
echo " "
echo " "
elif [ $option -eq 2 ];then
echo ">>>>> CPU and Memory Info. <<<<<"
echo "====================================="
echo " "
echo
echo " CPU :- `lsdev | grep Processor | wc -l`"
echo " "
echo " Memory :- `lsattr -El mem0 | tail -1`"
echo " "
echo " "
echo "====================================="
echo ">>>>> Important Kernel Params. <<<<<"
echo "====================================="
echo " "
echo "****************************************"
echo " "
lsattr -El aio0
elif [ $option -eq 3 ];then
echo ">>>>> Memory Usage Information <<<<<"
um=`svmon -G | head -2|tail -1| awk {'print '}`
um=`expr $um / 256`
tm=`lsattr -El sys0 -a realmem | awk {'print '}`
tm=`expr $tm / 1024`
fm=`expr $tm - $um`
ump=`expr $um \* 100`
ump=`expr $ump / $tm`
echo " "
echo "Memory Used :- "$ump"%"
echo " "
echo "----------------------";
echo "Memory Information\n";
echo "total memory = $tm MB"
echo "free memory = $fm MB"
echo "used memory = $um MB"
echo "-----------------------\n";
echo " "
echo " "
else
echo "Enter correct option"
fi
请提出更正建议。没有在脚本中添加选项 4(我需要它来显示所有信息)
这更像是代码审查。
- 对于菜单,使用
select
- 使用函数封装功能
- 将您的代码粘贴到 http://www.shellcheck.net
#!/bin/bash
main() {
cd /
PS3="Enter a choice: "
select ch in "Basic Details" "CPU Information" "Network Information" All Cancel
do
case $ch in
"Basic Details")
basicDetails
;;
"CPU Information")
cpuInfo
;;
"Network Information")
memUsage # you need to fix the menu text
;;
All)
basicDetails
cpuInfo
memUsage
;;
Cancel)
break
;;
esac
done
}
basicDetails() {
echo ">>>>> Server Name, Date, UPtime <<<<<"
echo "====================================="
echo "Date :- $(date)"
echo " "
echo "Host Name :- $(hostname)"
echo " "
echo " OS Version"
oslevel -g
echo " "
echo " UPTIME :- "
uptime
echo " "
echo " "
}
cpuInfo() {
echo ">>>>> CPU and Memory Info. <<<<<"
echo "====================================="
echo " "
echo
echo " CPU :- $(lsdev | grep -c Processor)"
echo " "
echo " Memory :- $(lsattr -El mem0 | tail -1)"
echo " "
echo " "
echo "====================================="
echo ">>>>> Important Kernel Params. <<<<<"
echo "====================================="
echo " "
echo "****************************************"
echo " "
lsattr -El aio0
}
memUsage() {
echo ">>>>> Memory Usage Information <<<<<"
um=$(svmon -G | head -2|tail -1| awk '{print }')
um=$(( um / 256 ))
tm=$(lsattr -El sys0 -a realmem | awk '{print }')
tm=$(( tm / 1024 ))
fm=$(( tm - um ))
ump=$(( um * 100 / tm ))
echo " "
echo "Memory Used :- $ump%"
echo " "
echo "----------------------"
echo "Memory Information"
echo
echo "total memory = $tm MB"
echo "free memory = $fm MB"
echo "used memory = $um MB"
echo "-----------------------"
echo
echo " "
echo " "
}
main "$@"
我很不明白"add the menu at start",在你的脚本中,菜单是最先打印出来的语句。这是重复菜单的示例,其中退出程序取决于用户输入
#!/bin/sh
#method to just print your menu
printmenu() {
echo "1. Operation 1"
echo "2. Operation 2"
echo "3. Exit"
}
operation1() {
echo "Operation 1 is performed..!"
}
operation2() {
echo "Operation 2 is performed..!"
}
while [ 1 ]
do
printmenu # printing menu
read u_option
#case handling the user inputs
case $u_option in
1) operation1;; # calling function for operation1
2) operation2;; # calling function for operation2
3) echo "Terminating the program as per your request"
exit;;
*) echo "Invalid option, provide only valid integers"
esac
done
bash 具有 select
内置:
select val in cherry banana apple ; do
echo "$val"
# do other things with $val
# ...
break # Leave this out if you want to run
# the menu forever in an endless loop
done