Portál AbcLinuxu, 8. listopadu 2025 18:34
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" && pwd
Funguje 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.