Bash - kde je chyba?

Bash - kde je chyba?
« kdy: 21. 03. 2023, 18:13:16 »
Snažím se napsat tento skript kde je třeba zadat číslo od 1 do 3 a ověřit, že je to číslo a je menší než 4.

Kód: [Vybrat]
#/usr/bin/bash
    clear
    echo "How to install:"
    while  [ ! -n "$WhereToStart" ] && [ ! "$WhereToStart" -le "4" ];
     do
       echo "1) Complete 2) From WineHQ 3) Continue after WinHQ \n"
       read WhereToStart
       case "$WhereToStart" in
          1 ) WhereToStart = "COMPLETE" ;;
          2 ) WhereToStart = "WINEHQ+" ;;
          3 ) WhereToStart = "SKIP_BEGIN_WINEHQ"
       esac
     done
   
    echo $WhereToStart

Hází chybu:
řádek 5: [: : očekáván celočíselný výraz

Má to dělat smyčku, pokud proměnná není číslo a není menší než 4
« Poslední změna: 21. 03. 2023, 18:15:36 od exkalibr »


alex6bbc

  • *****
  • 1 432
    • Zobrazit profil
    • E-mail
Re:Bash - kde je chyba?
« Odpověď #1 kdy: 21. 03. 2023, 18:21:24 »
a co tam na zacatku nekde definovat x=1

a vevnitr smycky neco jako $[$x+1] a to ted varim z vody, uz je to davno co jsem psal shell.

Re:Bash - kde je chyba?
« Odpověď #2 kdy: 21. 03. 2023, 18:35:28 »
a vevnitr smycky neco jako $[$x+1] a to ted varim z vody, uz je to davno co jsem psal shell.

Jestli $[$x+1] znamená konverzi na číslo, tak to je špatně. Protože když uživatel nechce nic vybrat a zadá tam blbost, např. "asldalf" tak by to bylo konvertováno na číslo. Ale on musí v tom případě opakovat smyčku a žádat zadání smysluplného vstupu.

tecka

  • ***
  • 138
    • Zobrazit profil
    • E-mail
Re:Bash - kde je chyba?
« Odpověď #3 kdy: 21. 03. 2023, 18:56:02 »
Mimochodem na tohle bash má příkaz select.

A chceš, aby se to opakovalo, dokud je hodnota prázdná NEBO neplatná.

V shebangu ti chybí vykřičník. Netuším, proč tam máš negované podmínky, když -z je v manuálu hned nad - n. Očekáváš číslo a neřešíš, když uživatel zadá něco jiného. A i když zadá správné číslo tak do té proměnné přiřadíš nečíselný text a zase to zařve. Teda nepřiřadíš, protože tam máš spuštění příkazu, a ne přiřazení.

Atd. Zase tak blbě, že nevěřím, že to neděláš naschvál.

Re:Bash - kde je chyba?
« Odpověď #4 kdy: 21. 03. 2023, 19:32:01 »
Kód: [Vybrat]
#!/bin/sh
clear
echo "Vyberte způsob instalace:"
while  [ -z "$WhereToStart" ] || [ "$WhereToStart" -le "4" ];
 do
   echo "1) Kompletní 2) Od WineHQ 3) Pokračovat až za WinHQ \n"
   read WhereToStart
   case "$WhereToStart" in
      1 ) WhereToStart = "COMPLETE" ;;
      2 ) WhereToStart = "WINEHQ+" ;;
      3 ) WhereToStart = "SKIP_BEGIN_WINEHQ"
   esac
 done

echo $WhereToStart

Ted to hlasi:
Vyberte způsob instalace:
1) Kompletní 2) Od WineHQ 3) Pokračovat až za WinHQ

adad
./test_install.st: 4: [: Illegal number: adad


Re:Bash - kde je chyba?
« Odpověď #5 kdy: 21. 03. 2023, 19:47:24 »
V case priradis do tej premennej string, takze ti to hlasi spravnu chybu.

Re:Bash - kde je chyba?
« Odpověď #6 kdy: 21. 03. 2023, 19:49:57 »
V case priradis do tej premennej string, takze ti to hlasi spravnu chybu.

Jasne ale potreboval bych ten string taky otestovat jestli je ciselna hodnota

Re:Bash - kde je chyba?
« Odpověď #7 kdy: 21. 03. 2023, 19:58:05 »
Kamarád navrhuje toto (neřešit to porovnávání se 4, to vyplyne automaticky):

Kód: [Vybrat]
#!/usr/bin/bash

clear
echo "How to install:"

while true; do
    read -p "Enter a number between 1 and 3: " WhereToStart

    case "$WhereToStart" in
        1) WhereToStart="COMPLETE"; break;;
        2) WhereToStart="WINEHQ+"; break;;
        3) WhereToStart="SKIP_BEGIN_WINEHQ"; break;;
        *) echo "Invalid input. Please enter a number between 1 and 3.";;
    esac
done

echo "You chose $WhereToStart."

Re:Bash - kde je chyba?
« Odpověď #8 kdy: 21. 03. 2023, 20:05:03 »
alebo:

Kód: [Vybrat]
#!/bin/bash
clear
echo "Vyberte způsob instalace:"
while  [ -z "$WhereToStart" ] || ! [[ "$WhereToStart" =~ ^1|2|3$ ]];
 do
   echo "1) Kompletní 2) Od WineHQ 3) Pokračovat až za WinHQ \n"
   read WhereToStart
   case "$WhereToStart" in
      1 ) WhereToStartResult="COMPLETE" ;;
      2 ) WhereToStartResult="WINEHQ+" ;;
      3 ) WhereToStartResult="SKIP_BEGIN_WINEHQ"
   esac
 done

echo $WhereToStartResult

Re:Bash - kde je chyba?
« Odpověď #9 kdy: 21. 03. 2023, 20:06:52 »
Kamarád navrhuje toto (neřešit to porovnávání se 4, to vyplyne automaticky):

Kód: [Vybrat]
*) echo "Invalid input. Please enter a number between 1 and 3.";;

Ajaj, tak jednoduche. Ze me to nenapadlo driv. Diky

k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Bash - kde je chyba?
« Odpověď #10 kdy: 23. 03. 2023, 00:37:59 »
kdyz je rec o zjednoduseni, ten pripadny navrh od "Death Walker" (i cistejsi je to od "Tomas-T" ktere bezne pouzivam) tak pri pripadne dalsi veci co bys psal, posilam zjednodusene, while nedetekuje zbytecne prazdny string kdyz te stejne zajima jen existence 1/2/3, plus dotaz ceka jen na 1 znak bez potreby enteru, plus odpoved se pise na radek s otazkou:

Kód: [Vybrat]
#!/bin/bash
clear
echo -n "Vyberte způsob instalace:"
while [[ ${WhereToStart} != @(1|2|3) ]]; do
    echo -n -e "\n1) Kompletní 2) Od WineHQ 3) Pokračovat až za WinHQ: "
   read -n 1 WhereToStart
   case "$WhereToStart" in
      1 ) WhereToStartResult="COMPLETE" ;;
      2 ) WhereToStartResult="WINEHQ+" ;;
      3 ) WhereToStartResult="SKIP_BEGIN_WINEHQ"
   esac
 done

echo -e "\n${WhereToStartResult}"

EDIT:
- kdyz v stringu pro echo pouzivas \n pro novy radek (nebo \t pro tabulator, atd) tak aby se to spravne interpretovavo musis echo volat s parametrem -e
- kdyz pouzivas u while, if, atd [[ ]] (vec bashe) misto [ ] tak neni potreba promenou psat do uvozovek
- promenou doporucuju psat do {} tedy misto $promena psat ${promena}, jednak to pak nedela problem kdyz ji spojis s pevnym stringem napr echo "tohle je $promenatady" Vs echo "tohle je ${promena}tady", zaroven je to prehlednejsi a take kdyz pak chces nazvy promenych zmenit tak zmenou ${promena} za ${jinapromena} neovlivnis pripadnou $promenadalsi kdyz bude ${promenadalsi}
« Poslední změna: 23. 03. 2023, 00:44:06 od k3dAR »

Re:Bash - kde je chyba?
« Odpověď #11 kdy: 23. 03. 2023, 15:02:20 »
Když stahuju skript
Kód: [Vybrat]
apt install -y oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)
jak zeditovat ten stažený soubor, aby nenajížděl do shellu a neptal se zda chci nastavit zsh jako výchozí shell?

Když edituju skript na windows v mc se jeví jako ^M na konci řádku asi carriage return, jak odstranit?

Re:Bash - kde je chyba?
« Odpověď #12 kdy: 23. 03. 2023, 16:54:14 »
Když stahuju skript
Kód: [Vybrat]
apt install -y oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)
jak zeditovat ten stažený soubor, aby nenajížděl do shellu a neptal se zda chci nastavit zsh jako výchozí shell?

Když edituju skript na windows v mc se jeví jako ^M na konci řádku asi carriage return, jak odstranit?

Ad a) A to má prosímpěkně smysl jaký?
Instralujete si zsh, je podle mě logické, že se vás to ptá na nastavení toho shelu jako defaultní...


Ad b) To má jako smysl jaký používat (nějak, jak????) midnight commander na windows? 
Nebo jenom píšete jak tatar a vlastně editujete skripty pro linux v nějakém editoru ve windows a to vám je zmrší a na linuxu je prohlížíte v mc?

Na to je odpověď jednoduchá, skripty pro linux editujte na linuxu třeba v tom mc - nebo se naučte v linuxu používat vi(m) anebo ještě lépe emacs.

OT:
Už dlouho mám pocit, že jste jen nějaká počítačová entita, kterou si někdo naprogramoval, co generuje obskurní dotazy tady do fóra a tím zvyšuje zdejší návštěvnost. Anebo si někdo hraje s GPT a vrací sem konverzaci na kterou místní ocasové odpovídají, a tím se někdo náramně baví.
Jinak si to spektrum a záběr těch otázek a problémů nedokážu vysvětlit... 
Gréta je nejlepší.

Re:Bash - kde je chyba?
« Odpověď #13 kdy: 23. 03. 2023, 19:17:35 »
Nevšiml jste si, že se neinstaluje zsh, ale oh-my-zsh.
Smysl to má takový, že chci, aby se to nainstalovalo bez jakéhokoliv zdržování. Na vaše další otázky nemá smysl odpovídat, protože to je prachobyčejné trolení.

Re:Bash - kde je chyba?
« Odpověď #14 kdy: 23. 03. 2023, 19:20:43 »
Když stahuju skript
Kód: [Vybrat]
apt install -y oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)
jak zeditovat ten stažený soubor, aby nenajížděl do shellu a neptal se zda chci nastavit zsh jako výchozí shell?

Když edituju skript na windows v mc se jeví jako ^M na konci řádku asi carriage return, jak odstranit?
počkej až si v MC zedituješ něco z /etc/, třebas services
Už TO NIKDY NEDĚLEJ :-)
pro zobrazení cat -v file
pro úpravu příkaz dos2unix , sed , nebo vi. najdi si syntaxi

pokud by sis takto blbě editovaný skript pustil , skončíš s řadou funny side efektů, jako že ti třeba vytvoří soubory, které ti za nic nepůjdou smazat a ty nebudeš vědet proč a až na to přijdeš, zas nebudeš vědět jak je smazat :-)