Portál AbcLinuxu, 13. května 2025 22:41
ls /home/ | while read DIR do echo $DIR donedostanu výsledek
20_07_2012_16_04_05_backup_http 20_07_2012_16_04_08_backup_http 20_07_2012_16_04_26_backup_http 20_07_2012_16_04_35_backup_httpa potřebuji označit jeden ten adresář z nějakého menu, něco jako tohle
echo "MENU" 01 - 20_07_2012_16_04_05_backup_http 02 - 20_07_2012_16_04_08_backup_http 03 - 20_07_2012_16_04_26_backup_http 04 - 20_07_2012_16_04_35_backup_http echo -n " Zadejte Vaši volbu : " read choice case $choice in 01) echo "1";; 02) echo "2";; 03) echo "3";; 04) echo "2";; esacPoradíte prosím někdo? Děkuji
Řešení dotazu:
a co za pomoci programu dialog , nebude to hezčí ?
#!/bin/bash dirs=(*/) read -p "$( f=0 for dirname in "${dirs[@]}" ; do echo "$((++f)): $dirname" done echo -ne 'Please select a directory > ' )" selection selected_dir="${dirs[$((selection-1))]}" echo "You selected '$selected_dir'" Příklad 2: #!/bin/bash printf "Please select folder:\n" select d in */; do test -n "$d" && break; echo ">>> Invalid Selection"; done cd "$d" && pwdFunguje to v bashi, pro jiný shel (sh) by to snad někdo mohl upravit.
Zamknout a zahodit klíče.
Takto by to mohlo vyzerat tiez, je tam aj co to osetrene.
#!/bin/bash ## Je mozne zadat top level adresar ako argument pre skript: script /home ## ,ak nie je zadany, tak sa berie aktualny adresar, kde sa nachadzame. ## treba odkomentovat #top_dir="$1" #def_top_dir="${top_dir:-$PWD}" ## zakomentovat nasledovny riadok, ak sa pouzije predchadzajuci sposob zadavania top level adresara. def_top_dir="/home/" declare -i index=1 select declare -a array_dirs=( "$def_top_dir"/*/ ) # overenie, ci je adresar dostupny na citanie [[ -r "$def_top_dir" ]] || { echo "$def_top_dir neexistuje alebo je necitatelny."; exit 1; } # ak by sa nenasiel ziadny podadresar, tak nedojde k expanzii a tym padom by prvy a jediny # prvok v poli bol "$def_top_dir"/*/; pole bude vzdy obsahovat aspon jeden prvok [[ -d "${array_dirs[1]}" ]] || { echo "V $def_top_dir sa ziadne podadresare nenasli."; exit 1; } for item in "${array_dirs[@]}" do # pole ma index zacinajuci od 0, no pre cloveka (pre mna) , je # logickejsie prvy prvok nez nulty prvok, preto $(( index - 1 )) echo "$index : ${array_dirs[$(( $index - 1 ))]}" (( index++ )) done while read -p "Zadaj index pozadovaneho adresara : " select do (( 0 < select )) && (( select <= ${#array_dirs[@]} )) && break || echo "Index je mimo rozsahu [ 1 - ${#array_dirs[@]} ]." done echo "${array_dirs[$(( $select - 1 ))]}"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.