用于显示菜单的Shell脚本

0mkxixxg  于 2023-01-05  发布在  Shell
关注(0)|答案(2)|浏览(145)

我的Shell脚本中出现了一些问题,我编写了一个非常短的示例,但没有得到预期的输出,我在case语句中使用了if条件,但出现了一些故障。
我的问题是
当我按下2,然后用户应该给予路径首先搜索文件,如果没有给路径,然后我会在默认路径中寻找,因为我已经提到,但我不能在这里得到这个功能,有人能帮助我在这方面吗?请我会感谢您的帮助:)
我的密码是:

#!/bin/bash
trap '' 2
while true
do
clear

echo -e " \t *******************************************************************"
echo -e " \t ******************** TEST-MENU ********************************"
echo -e  "\t *******************************************************************"
echo -e  "\n"
echo -e "\t\t 1)Show Date/Time"
echo -e "\t\t 2)File-Search"
echo -e "\t\t e)End \n"

echo -e "\t\t Select your choice:\c" ;  read answer
echo -e  "\t*******************************************************************"

case $answer in
1)date +'%y%m%d %H:%M:%S' ;;
2)echo -e "Please give your dir:\c" ; read directory
        if [ "$directory"  = "" ]    then
        $directory = "[/test/sample/]" fi

echo -e "Enter your file [$directory]:\c" ; read search
        find "$directory" -name "*$search*" -type f -print|xargs ls -l ;;

e) exit ;;

esac
echo -e "Enter return to continue \c"
read answer

done
ct2axkht

ct2axkht1#

几个问题:

  • 变量赋值

$目录="[/测试/样品/]"文件
赋值时不使用$,因此应该使用like
目录="[/测试/样品/]"文件

  • 你的默认目录

$目录="[/测试/样品/]"文件
你为什么需要方括号?你在做ls [/test/sample]吗?把它去掉就行了。

  • 你的如果

如果["$目录"=""]
如果用户只是按Enter键,那么它不会工作,因此您应该这样做:
如果["X $目录"="X"]

  • 你可以把ls组合起来得到:

查找"$目录"-名称"*$搜索 *"-键入f-执行ls-l {};

hujrc8aj

hujrc8aj2#

下面是一个编辑了格式并添加了注解的例子,你需要测试一下搜索文件名是否为null,就好像它不存在一样,它显示的是当前目录中的文件:

#!/bin/bash
trap '' 2

# Set up the default value. If you ever want to change it, just do it here.
# -r means make it read-only so this makes it a CONSTANT.
declare -r DEFAULT=1

while true
  do
  clear

  echo -e " \t *******************************************************************"
  echo -e " \t ************************ TEST-MENU ********************************"
  echo -e  "\t *******************************************************************"
  echo -e  "\n"
  echo -e "\t\t 1)Show Date/Time"
  echo -e "\t\t 2)File-Search"
  echo -e "\t\t e)End \n"

  # Typically in a prompt like this
  #  when there is a value in square brackets that means if you just
  #  press enter you will get that value as the default.
  echo -e "\t\t Select your choice [$DEFAULT]: \c" ;  read answer
  echo -e  "\t*******************************************************************"

  # If nothing was selected, use the default.
  # -z tests for null.
  if [[ -z "$answer" ]]
    then answer=$DEFAULT
  fi

  case $answer in
    1) date +'%y%m%d %H:%M:%S'
       ;;
    2) echo -e "Please give your dir: \c"
       read directory
       if [[ -z "$directory" ]] # Test for null
         then directory="/test/sample/"
       fi

       echo -e "Enter your file [$directory]: \c"
       read search
       find "$directory" -name "*$search*" -type f -print|xargs ls -l
       ;;
    e) exit
       ;;

    # Always expect the unexpected!  The * is the default for a case
    #  statement when no match is found.
    *) echo -e "[$answer] is an invalid selection"
       ;;
  esac

  echo -e "Enter return to continue \c"
  read answer
done

相关问题