আমি কীভাবে শেল স্ক্রিপ্টে একটি নির্বাচন মেনু তৈরি করতে পারি?


134

আমি একটি সাধারণ বাশ স্ক্রিপ্ট তৈরি করছি এবং আমি এটিতে একটি নির্বাচন মেনু তৈরি করতে চাই:

$./script

echo "Choose your option:"

1) Option 1  
2) Option 2  
3) Option 3  
4) Quit  

এবং ব্যবহারকারীর পছন্দ অনুসারে, আমি চাই বিভিন্ন পদক্ষেপ কার্যকর করা হোক। আমি বাশ শেল স্ক্রিপ্টিং নুব, আমি কিছু উত্তরের জন্য ওয়েবে অনুসন্ধান করেছি, কিন্তু কিছুই সত্যই কংক্রিট পাইনি।


1
প্রশ্নটি পুরানো এবং সুরক্ষিত, তবে আমি fzf ব্যবহার করি। ব্যবহার করে দেখুন seq 10 | fzf। অপূর্ণতা হ'ল fzf ডিফল্টরূপে ইনস্টল করা হয় না। আপনি এখানে fzf খুঁজে পেতে পারেন: github.com/junegunn/fzf
লঞ্চ

উত্তর:


152
#!/bin/bash
# Bash Menu Script Example

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 3")
            echo "you chose choice $REPLY which is $opt"
            ;;
        "Quit")
            break
            ;;
        *) echo "invalid option $REPLY";;
    esac
done

যোগ breakবিবৃতি যেখানেই থাকুন না কেন আপনি প্রয়োজন selectলুপ থেকে প্রস্থান করার জন্য। যদি একটি breakসম্পাদনা না করা হয়, selectবিবৃতিটি লুপ করে এবং মেনুটি পুনরায় প্রদর্শিত হয়।

তৃতীয় বিকল্পে, আমি সেই ভেরিয়েবলগুলি অন্তর্ভুক্ত করেছি যেগুলি selectবিবৃতি দ্বারা সেট করা আছে তা প্রমাণ করতে যে আপনার সেই মানগুলিতে অ্যাক্সেস রয়েছে। আপনি যদি এটি চয়ন করেন তবে এটি আউটপুট দেবে:

you chose choice 3 which is Option 3

$REPLYপ্রম্পটে আপনি যে স্ট্রিংটি দিয়েছিলেন তা আপনি দেখতে পাচ্ছেন । এটি অ্যারেতে সূচক হিসাবে ব্যবহৃত হয় যেন অ্যারেটি ${options[@]}1 ভিত্তিক হয়। পরিবর্তনশীল $optঅ্যারেতে সূচক থেকে স্ট্রিং থাকে।

নোট করুন যে পছন্দগুলি সরাসরি selectবিবৃতিতে একটি সাধারণ তালিকা হতে পারে :

select opt in foo bar baz 'multi word choice'

তবে আপনি পছন্দগুলির মধ্যে একটিতে ফাঁকা থাকার কারণে আপনি কোনও স্কেলার ভেরিয়েবলের মধ্যে এ জাতীয় তালিকা রাখতে পারবেন না।

আপনি যদি ফাইলগুলির মধ্যে বেছে নিচ্ছেন তবে আপনি ফাইল গ্লোব্বিং ব্যবহার করতে পারেন:

select file in *.tar.gz

@ আবদুল: এটাই উদ্দেশ্যমূলক আচরণ। "প্রস্থান করুন" বিকল্পটি কার্যকর করে breakযা selectলুপ থেকে বেরিয়ে আসে । আপনার breakযে কোনও জায়গাতে এটি যুক্ত করতে পারেন । ব্যাশ ম্যানুয়াল যুক্তরাষ্ট্র "কমান্ড প্রতিটি নির্বাচন না হওয়া পর্যন্ত একটি বিরতি কমান্ড মৃত্যুদন্ড কার্যকর করা হয়, যা এ নির্বাচন কমান্ড সম্পন্ন হয়ে বাতলান পর মৃত্যুদন্ড কার্যকর করা হয়।"
ডেনিস উইলিয়ামসন 17

: FWIW, গনুহ ব্যাশ 4.3.11 সঙ্গে 14.04 এই চলমান লাইন 9 ত্রুটিগুলি উত্পাদন করে ./test.sh: line 9: syntax error near unexpected token "বিকল্প 1" './test.sh: লাইন 9: `" বিকল্প 1 ")'`
ব্রায়ান মরটন

@ ব্রায়ানমার্টন: আমি এটি পুনরুত্পাদন করতে পারি না। সম্ভবত আপনি স্ক্রিপ্টের আগে একটি উক্তি বা অন্য কোনও চরিত্র হারিয়েছেন (অথবা একটি অতিরিক্ত আছে)।
ডেনিস উইলিয়ামসন

2
@dtmland: কমান্ডের PS3জন্য প্রম্পট select। এটি স্বয়ংক্রিয়ভাবে ব্যবহৃত হয় এবং স্পষ্টভাবে উল্লেখ করার প্রয়োজন হয় না। PS3এবং selectডকুমেন্টেশন।
ডেনিস উইলিয়ামসন

1
@Christian: না, এটা করা যাবে না (কিন্তু এটা পারা যদি আমি সূচকের ব্যবহার $optionsমধ্যে caseমূল্যবোধের পরিবর্তে বিবৃতি)। আমি মনে করি caseবিবৃতিগুলির বিভাগগুলির কার্যকারিতার জন্য মানগুলি আরও ভাল করে ডকুমেন্টগুলি ব্যবহার করে ।
ডেনিস উইলিয়ামসন

56

প্রতি সেপ্টেম্বর কোনও নতুন উত্তর নয় , তবে যেহেতু এখনও কোনও গ্রহণযোগ্য উত্তর নেই, তাই নির্বাচন এবং জেনটি উভয়ের জন্য এখানে কয়েকটি কোডিং টিপস এবং কৌশল দেওয়া হয়েছে:

title="Select example"
prompt="Pick an option:"
options=("A" "B" "C")

echo "$title"
PS3="$prompt "
select opt in "${options[@]}" "Quit"; do 

    case "$REPLY" in

    1 ) echo "You picked $opt which is option $REPLY";;
    2 ) echo "You picked $opt which is option $REPLY";;
    3 ) echo "You picked $opt which is option $REPLY";;

    $(( ${#options[@]}+1 )) ) echo "Goodbye!"; break;;
    *) echo "Invalid option. Try another one.";continue;;

    esac

done

while opt=$(zenity --title="$title" --text="$prompt" --list \
                   --column="Options" "${options[@]}"); do

    case "$opt" in
    "${options[0]}" ) zenity --info --text="You picked $opt, option 1";;
    "${options[1]}" ) zenity --info --text="You picked $opt, option 2";;
    "${options[2]}" ) zenity --info --text="You picked $opt, option 3";;
    *) zenity --error --text="Invalid option. Try another one.";;
    esac

done

উল্লেখযোগ্য:

  • উভয়ই লুপ করবে যতক্ষণ না ব্যবহারকারী স্পষ্টভাবে প্রস্থান (বা জেনটির জন্য বাতিল) চয়ন করে। এটি ইন্টারেক্টিভ স্ক্রিপ্ট মেনুগুলির জন্য একটি ভাল পদ্ধতির: কোনও পছন্দ নির্বাচিত হওয়ার পরে এবং ক্রিয়া সম্পাদনের পরে মেনুটি অন্য পছন্দের জন্য আবার উপস্থাপন করা হয়। যদি পছন্দটি কেবলমাত্র এককালীন হয়, কেবলমাত্র breakপরে ব্যবহার করুন esac(জেনটিটি পদ্ধতির আরও হ্রাস করা যেতে পারে)

  • উভয়ই caseমান-ভিত্তিক পরিবর্তনের সূচক ভিত্তিক। আমি মনে করি এটি কোড করা এবং বজায় রাখা সহজ

  • অ্যারে ব্যবহারের জন্যও ব্যবহৃত হয় zenity

  • "প্রস্থান" বিকল্পটি প্রাথমিক, মূল বিকল্পগুলির মধ্যে নয়। এটি যখন প্রয়োজন হয় তখন "যুক্ত" হয়, তাই আপনার অ্যারে পরিষ্কার থাকে। সামগ্রিকভাবে, প্রস্থানটির জন্য যাই হোক না কেন "প্রস্থান" প্রয়োজন হয় না, ব্যবহারকারী প্রস্থান করতে কেবল "বাতিল" (বা উইন্ডোটি বন্ধ) ক্লিক করতে পারেন। লক্ষ্য করুন যে উভয় বিকল্পগুলির একই, অচ্ছুত অ্যারে ব্যবহার করে।

  • PS3এবং REPLYvars নামকরণ করা যাবে নাselectএগুলি ব্যবহার করার জন্য হার্ডকোডযুক্ত। স্ক্রিপ্টের অন্যান্য সমস্ত ভেরিয়েবল (অপ্ট, বিকল্পগুলি, প্রম্পট, শিরোনাম) আপনার পছন্দসই নাম থাকতে পারে, যদি আপনি সামঞ্জস্য করেন


অসাধারণ ব্যাখ্যা। ধন্যবাদ. এই প্রশ্নটি গুগলে এখনও তুঙ্গে, তাই খুব খারাপ এটি বন্ধ।
মাউন্টেনএক্স

আপনি একই ব্যবহার করতে পারে caseজন্য গঠন selectসংস্করণ যা আপনার জন্য ব্যবহার করছেন zenity: VERSION case "$opt" in . . . "${options[0]}" ) . . .(পরিবর্তে $REPLYএবং সূচকের 1, 2এবং 3)।
ডেনিস উইলিয়ামসন

@ ডেনিস উইলিয়ামসন, হ্যাঁ আমি পারতাম এবং "বাস্তব" কোডে উভয় ক্ষেত্রে একই কাঠামো ব্যবহার করা ভাল pre আমি ইচ্ছাকৃতভাবে $REPLYসূচক এবং মানগুলির মধ্যে সম্পর্কটি প্রদর্শন করতে চেয়েছিলাম ।
MestreLion

55

ব্যবহার করে dialog, কমান্ডটি দেখতে এরকম হবে:

কথোপকথন - অস্পষ্ট - ব্যাকটাইটেল "এখানে ব্যাকটাইটেল" - শিরোনাম "এখানে শিরোনাম" --menu "নিম্নলিখিত বিকল্পগুলির মধ্যে একটি চয়ন করুন:" 15 40 4 \
1 "বিকল্প 1" \
2 "বিকল্প 2" \
3 "বিকল্প 3"

এখানে চিত্র বর্ণনা লিখুন

এটি একটি স্ক্রিপ্টে রাখা:

#!/bin/bash

HEIGHT=15
WIDTH=40
CHOICE_HEIGHT=4
BACKTITLE="Backtitle here"
TITLE="Title here"
MENU="Choose one of the following options:"

OPTIONS=(1 "Option 1"
         2 "Option 2"
         3 "Option 3")

CHOICE=$(dialog --clear \
                --backtitle "$BACKTITLE" \
                --title "$TITLE" \
                --menu "$MENU" \
                $HEIGHT $WIDTH $CHOICE_HEIGHT \
                "${OPTIONS[@]}" \
                2>&1 >/dev/tty)

clear
case $CHOICE in
        1)
            echo "You chose Option 1"
            ;;
        2)
            echo "You chose Option 2"
            ;;
        3)
            echo "You chose Option 3"
            ;;
esac

আমি খেয়াল করা জরুরী যে আমি লাইনে করা চাই TERMINAL=$(tty)আমার স্ক্রিপ্ট উপরের এবং তারপর CHOICEপরিবর্তনশীল সংজ্ঞা আমি পরিবর্তন 2>&1 >/dev/ttyকরতে 2>&1 >$TERMINALযদি স্ক্রিপ্ট একটি ভিন্ন টার্মিনাল প্রেক্ষাপটে চালানো ফেরৎ সমস্যা এড়ানোর জন্য।
শ্রুত 1

1
--backtitleপ্যারামিটারটি কী করে ?
ট্রিগ

2
এটি পটভূমিতে ব্লুজস্ক্রিনের শিরোনাম। আপনি এটিকে স্ক্রিনশটের উপরের বাম কোণে দেখতে পাবেন যা এখানে “ব্যাকটাইটেল” পড়েছে।
আলা আলী

14

বিকল্পগুলি তৈরি করার জন্য আপনি এই সাধারণ স্ক্রিপ্টটি ব্যবহার করতে পারেন

#! / বিন / ব্যাশ
প্রতিধ্বনি "অপারেশন নির্বাচন করুন ************"
প্রতিধ্বনি "1) অপারেশন 1"
প্রতিধ্বনি "2) অপারেশন 2"
প্রতিধ্বনি "3) অপারেশন 3"
প্রতিধ্বনি "4) অপারেশন 4" 
পড়া n কেস $ n ইন 1) প্রতিধ্বনি "আপনি বিকল্প 1 পছন্দ করেছেন" ;; 2) প্রতিধ্বনি "আপনি বিকল্প 2 পছন্দ করেছেন" ;; 3) প্রতিধ্বনিত "আপনি বিকল্প 3 নির্বাচন করেছেন" ;; 4) প্রতিধ্বনি "আপনি পছন্দ 4 পছন্দ করেছেন" ;; *) প্রতিধ্বনি "অবৈধ বিকল্প" ;; esac


8

আমার কাছে আরও একটি বিকল্প রয়েছে যা এই উত্তরের মিশ্রণ তবে এটি কী সুন্দর করে তা হ'ল আপনাকে কেবল একটি কী টিপতে হবে এবং তারপরে স্ক্রিপ্টটি -nপড়ার বিকল্পটির জন্য ধন্যবাদ জানায় । এই উদাহরণস্বরূপ, আমরা ANSআমাদের ভেরিয়েবল হিসাবে স্ক্রিপ্টটি শাটডাউন, রিবুট বা কেবল স্ক্রিপ্ট থেকে প্রস্থান করার অনুরোধ করছি এবং ব্যবহারকারীকে কেবল E, R, বা S. টিপতে হবে আমি প্রস্থান করার জন্য ডিফল্ট সেটও করেছি তাই যদি এন্টার টিপানো হয় তবে স্ক্রিপ্টটি প্রস্থান করা হবে।

read -n 1 -p "Would you like to exit, reboot, or shutdown? (E/r/s) " ans;

case $ans in
    r|R)
        sudo reboot;;
    s|S)
        sudo poweroff;;
    *)
        exit;;
esac

7

যেহেতু এটি উবুন্টুতে লক্ষ্যযুক্ত, আপনি যে কোনও ব্যাকএন্ড ডাবকনফ ব্যবহার করতে কনফিগার করেছেন তা ব্যবহার করা উচিত। আপনি এটির সাথে ডাবকনফ ব্যাকএন্ড খুঁজে পেতে পারেন:

sudo -s "echo get debconf/frontend | debconf-communicate"

যদি এটি "কথোপকথন" বলে তবে সম্ভবত এটি ব্যবহার করে whiptailবা dialog। লুসিডে এটি whiptail

যদি এটি ব্যর্থ হয়, ডেনিস উইলিয়ামসনের ব্যাখ্যা অনুসারে ব্যাশ "নির্বাচন করুন" ব্যবহার করুন।


3
এটি সম্ভবত এই প্রশ্নের জন্য ওভারকিল, তবে হুইপটেল এবং কথোপকথন উল্লেখ করার জন্য +1! আমি এই আদেশগুলি সম্পর্কে সচেতন ছিলাম না ... খুব মিষ্টি!
MestreLion

7
#! / বিন / SH
show_menu () {
    স্বাভাবিক = `প্রতিধ্বনি" \ 033 [এম "`
    মেনু = `প্রতিধ্বনি" \ 033 [36 মি "` # ব্লু
    সংখ্যা = `প্রতিধ্বনি" \ 033 [33 মি "` # হাই
    বিগ্রেড = `প্রতিধ্বনি" \ 033 [41 মি "` `
    fgred = `প্রতিধ্বনি" \ 033 [31 মি "` `
    প্রিন্টফ "\ n $ {মেনু} **************************************** *** $ {স্বাভাবিক} \ N "
    printf "$ {মেনু} ** $ {সংখ্যা {1) $ {মেনু} মাউন্ট ড্রপবক্স {{স্বাভাবিক} \ n"
    প্রিন্টফ "$ {মেনু} ** $ {সংখ্যা} 2) $ {মেনু USB মাউন্ট ইউএসবি 500 গিগ ড্রাইভ {{স্বাভাবিক} \ n"
    printf "$ {মেনু} ** $ {সংখ্যা} 3) $ {মেনু Ap অ্যাপাচি পুনরায় চালু করুন {{স্বাভাবিক} \ n"
    প্রিন্টফ "" {{মেনু} ** {{সংখ্যা} 4) {{মেনু} এসএসএস ফ্রস্ট টমগ্যাট সার্ভার {{স্বাভাবিক} \ n "
    printf "$ {মেনু} ** $ {সংখ্যা} 5) $ {মেনু other কিছু অন্যান্য আদেশ $ {স্বাভাবিক {\ n"
    প্রিন্টফ "" {মেনু} ******************************************** * $ {স্বাভাবিক} \ N "
    printf "দয়া করে একটি মেনু বিকল্প দিন এবং প্রবেশ করুন বা প্রস্থান করার জন্য $ {fgred} x $ {স্বাভাবিক}"
    অপ্ট পড়ুন
}

option_picked () {
    msgcolor = `প্রতিধ্বনি" \ 033 [01; 31 মি "` # গা bold় লাল
    স্বাভাবিক = `প্রতিধ্বনি" \ 033 [00; 00 মি "` # সাধারণ সাদা
    বার্তা = $ {@: - "$ {স্বাভাবিক} ত্রুটি: কোনও বার্তা পাস করা হয়নি"}
    printf "$ {msgcolor} $ {বার্তা} $ {স্বাভাবিক} \ n"
}

স্পষ্ট
show_menu
[$ opt! = '']
    করা
    যদি [$ opt = '']; তারপর
      প্রস্থান;
    আর
      কেস $ অপ্ট ইন
        1) পরিষ্কার;
            বিকল্প_পিকিত "বিকল্প 1 পিক";
            প্রিন্টফ "" সুডো মাউন্ট / দেব / এসডিএ 1 / এমএনটি / ড্রপবক্স /; # দ্য 3 টেরাবাইট ";
            show_menu;
        ;;
        2) পরিষ্কার;
            বিকল্প_পিকিত "অপশন 2 বাছাই";
            printf "sudo মাউন্ট / দেব / sdi1 / mnt / usbDrive; # 500 গিগ ড্রাইভ";
            show_menu;
        ;;
        3) পরিষ্কার;
            বিকল্প_পিকিত "অপশন 3 বাছাই";
            printf "sudo সার্ভিস অ্যাপাচি 2 রিস্টার্ট";
            show_menu;
        ;;
        4) পরিষ্কার;
            বিকল্প_পিকিত "অপশন 4 বাছাই";
            printf "ssh lmesser @ -p 2010";
            show_menu;
        ;;
        x) এর প্রস্থান;
        ;;
        \ N) প্রস্থান;
        ;;
        *)স্পষ্ট;
            বিকল্প_পিকিত "মেনু থেকে একটি বিকল্প চয়ন করুন";
            show_menu;
        ;;
      esac
    ফাই
সম্পন্ন

2
আমি জানি এটি পুরানো, তবে সংকলন করতে #! / বিন / বাশ পড়ার জন্য প্রথম লাইনের প্রয়োজন।
জ্যাকার 12

কোড পর্যালোচনা: বিবৃতিতে চলকটি $থেকে অনুপস্থিত । বিবৃতি অপ্রয়োজনীয়। বেমানান ইন্ডেন্টেশন। ব্যবহার কিছু জায়গায় যেখানে এটি হওয়া উচিত 'show_menu show_menu` লুপ উপরের করা যেতে পারে পরিবর্তে প্রতিটি পুনরাবৃত্তি হচ্ছে । বেমানান ইন্ডেন্টেশন। একক বর্গাকার বন্ধনী এবং দ্বিগুণ এর মিশ্রণ ব্যবহার। পরিবর্তে হার্ড-কোডেড এএনএসআই সিকোয়েন্স ব্যবহার করা । সমস্ত ক্যাপস বর্ণ নাম ব্যবহার করার পরামর্শ দেওয়া হয় না। বলা উচিত । পরিবর্তে ব্যাকটিক্স ব্যবহার করুন । ফাংশন সংজ্ঞাটি সামঞ্জস্যপূর্ণ হওয়া উচিত এবং ব্যবহার করা উচিত নয় ...$optwhileifmenu. casetputFGREDbgred$()
ডেনিস উইলিয়ামসন

... উভয় ফর্ম একসাথে। টার্মিনাল সেমিকোলনের প্রয়োজন হয় না। কিছু রঙ, ইত্যাদি, দুবার সংজ্ঞায়িত। মামলাটি \nকখনই কার্যকর করা হবে না। সম্ভবত আরও।
ডেনিস উইলিয়ামসন

6

আমি জেনিটি ব্যবহার করেছি, যা সর্বদা উবুন্টুতে মনে হয়, খুব ভালভাবে কাজ করে এবং অনেকগুলি ক্ষমতাও রয়েছে। এটি একটি সম্ভাব্য মেনুর স্কেচ:

#! /bin/bash

selection=$(zenity --list "Option 1" "Option 2" "Option 3" --column="" --text="Text above column(s)" --title="My menu")

case "$selection" in
"Option 1")zenity --info --text="Do something here for No1";;
"Option 2")zenity --info --text="Do something here for No2";;
"Option 3")zenity --info --text="Do something here for No3";;
esac

ওহো! এই স্নিপেটটির উপস্থিতি সম্পর্কে দুঃখিত, প্রথমবার পোস্ট করা এবং সম্ভবত এইচটিএমএল বন্ধ করতে হবে
LazyEchidna

আরও ভাল, সম্পাদনায় 'কোড নমুনা' চালু, সে সম্পর্কে দুঃখিত
LazyEchidna

5

বাশ অভিনব মেনু

প্রথমে এটি চেষ্টা করে দেখুন, তারপরে বিশদ বিবরণের জন্য আমার পৃষ্ঠাতে যান ... বাহ্যিক লাইব্রেরি বা ডায়লগ বা জেনটির মতো প্রোগ্রামের প্রয়োজন নেই ...

#/bin/bash
# by oToGamez
# www.pro-toolz.net

      E='echo -e';e='echo -en';trap "R;exit" 2
    ESC=$( $e "\e")
   TPUT(){ $e "\e[${1};${2}H";}
  CLEAR(){ $e "\ec";}
  CIVIS(){ $e "\e[?25l";}
   DRAW(){ $e "\e%@\e(0";}
  WRITE(){ $e "\e(B";}
   MARK(){ $e "\e[7m";}
 UNMARK(){ $e "\e[27m";}
      R(){ CLEAR ;stty sane;$e "\ec\e[37;44m\e[J";};
   HEAD(){ DRAW
           for each in $(seq 1 13);do
           $E "   x                                          x"
           done
           WRITE;MARK;TPUT 1 5
           $E "BASH SELECTION MENU                       ";UNMARK;}
           i=0; CLEAR; CIVIS;NULL=/dev/null
   FOOT(){ MARK;TPUT 13 5
           printf "ENTER - SELECT,NEXT                       ";UNMARK;}
  ARROW(){ read -s -n3 key 2>/dev/null >&2
           if [[ $key = $ESC[A ]];then echo up;fi
           if [[ $key = $ESC[B ]];then echo dn;fi;}
     M0(){ TPUT  4 20; $e "Login info";}
     M1(){ TPUT  5 20; $e "Network";}
     M2(){ TPUT  6 20; $e "Disk";}
     M3(){ TPUT  7 20; $e "Routing";}
     M4(){ TPUT  8 20; $e "Time";}
     M5(){ TPUT  9 20; $e "ABOUT  ";}
     M6(){ TPUT 10 20; $e "EXIT   ";}
      LM=6
   MENU(){ for each in $(seq 0 $LM);do M${each};done;}
    POS(){ if [[ $cur == up ]];then ((i--));fi
           if [[ $cur == dn ]];then ((i++));fi
           if [[ $i -lt 0   ]];then i=$LM;fi
           if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
           if [[ $before -lt 0  ]];then before=$LM;fi
           if [[ $after -gt $LM ]];then after=0;fi
           if [[ $j -lt $i      ]];then UNMARK;M$before;else UNMARK;M$after;fi
           if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
           UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
   INIT(){ R;HEAD;FOOT;MENU;}
     SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
     ES(){ MARK;$e "ENTER = main menu ";$b;read;INIT;};INIT
  while [[ "$O" != " " ]]; do case $i in
        0) S=M0;SC;if [[ $cur == "" ]];then R;$e "\n$(w        )\n";ES;fi;;
        1) S=M1;SC;if [[ $cur == "" ]];then R;$e "\n$(ifconfig )\n";ES;fi;;
        2) S=M2;SC;if [[ $cur == "" ]];then R;$e "\n$(df -h    )\n";ES;fi;;
        3) S=M3;SC;if [[ $cur == "" ]];then R;$e "\n$(route -n )\n";ES;fi;;
        4) S=M4;SC;if [[ $cur == "" ]];then R;$e "\n$(date     )\n";ES;fi;;
        5) S=M5;SC;if [[ $cur == "" ]];then R;$e "\n$($e by oTo)\n";ES;fi;;
        6) S=M6;SC;if [[ $cur == "" ]];then R;exit 0;fi;;
 esac;POS;done

1
এটি কেবল বাশ, কান্ডা শীতল সাথে কাজ করে।
লেটন এভারসন

2
চমৎকার! "তারপরে বিস্তারিত বর্ণনার জন্য আমার পৃষ্ঠাতে যান" এর কোনও লিঙ্ক আছে?
ওক


2

সার্ভারফল্টে ইতিমধ্যে একই প্রশ্নটির উত্তর রয়েছে। সেখানে সমাধান হুইপটেল ব্যবহার করে ।


ধন্যবাদ, তবে যেহেতু আমার স্ক্রিপ্টটি মূলধারার ব্যবহারের জন্য, তাই আমি এটি কোনও অতিরিক্ত নির্ভরতা নাও চাই। তবে আমি ভবিষ্যতে ব্যবহারের জন্য বুকমার্ক করব, কে জানে।
ড্যানিয়েল রডরিগস

-1

ধরে নিই যে আপনি একটি সরল শেল স্ক্রিপ্ট মেনু ব্যবহার করতে চান (কোনও অভিনব UI নেই), http://www.tldp.org/LDP/abs/html/testbranch.html থেকে মেনু উদাহরণটি দেখুন


1
উন্নত বাশ-স্ক্রিপ্টিং গাইডের অন্যান্য স্নিপেটের মতো, এই স্নিপেটগুলিতে বাগ এবং খারাপ অনুশীলন রয়েছে।
গিরিহা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.