質問

Hello I am writing a shell script menu and I want to give the users the options to change the way they can list directories but nothing happens when the user types in a directory it just loops back to the menu.

can any of you experienced programmers point out what I am doing wrong if so thanks in advance. here is what i have so far:

while true
        do
        clear
        echo "Listing options "
        echo "========================================="
        echo "1. List Hidden Files "
        echo "2. List the name of the current directory "
        echo "3. show files that have a following / or * "
        echo "4. show group ownership of files in the directory "
        echo "5. Print the inode id for each file in the directory "
        echo "6. Long listing of details about the files and the directory "
        echo "7. List all sub directories encountered while listing "
        echo "8. Sort by Time instead of name "

                read dirChoice
                case "$dirChoice" in

                1)echo -n "Please Enter the directory you wish to list: "
                read dList
                ls -a ~/$dList;
                break;;
                2)echo -n "Please Enter the directory you wish to list: "
                read dList
                ls -d ~/$dList;
                ;;
                3)echo -n "Please Enter the directory you wish to list: "
                read dList
                ls -f ~/$dList;
                ;;
esac
done
;;
役に立ちましたか?

解決

I think you just need a read statement at the end of the loop - otherwise the screen is cleared and the output the user has selected is therefore lost.

esac
read -p "press any key to continue " 
done

This is only a suggestion: you could store the response in a variable and use that to exit the loop.

 read -p "press x to quit - any other key to contine " answer
 if [ "$answer = "x" ];then
     break
 fi

他のヒント

You might want to consider using the select command:

choices=( "List Hidden Files"
          "List the name of the current directory"
          "Show files that have a following / or *"
          "Show group ownership of files in the directory"
          "Print the inode id for each file in the directory"
          "Long listing of details about the files and the directory"
          "List all sub directories encountered while listing"
          "Sort by Time instead of name")

select dirChoice in "${choices[@]}"; do
    case "$dirChoice" in

            1) read -p "Please Enter the directory you wish to list: " dList
               ls -a ~/$dList;
               break;;

             # etc. 
    esac
done
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top