Jak přidáte číslo jako argument příkazového řádku?

Pokouším se přidat 1 číslo z příkazového řádku a jedno jako výchozí. Například: Když uživatel zadá číslo 50, skript přidá 10 (jako výchozí číslo).

./script 50 The sum of 50+ 10 is 60. 

To je to, co zatím mám.

echo -n "Please enter a number: " read number default = 10 sum = $((default + number)) // this line does not seem to work echo "The sum of $number and 10 is $sum." 

Mám špatnou syntaxi? Nejsem si jistý, jestli jsem na správné cestě. Přidávám špatně čísla? Mám místo toho použít awk?

let sum = $default + $number 

Komentáře

  • Stačí přidat, místo echo ing a poté použití read přímo můžete psát: read -p 'Please enter a number: ' yournumber

odpověď

Mezery způsobují chyby.

Pokud chcete, aby uživatel zadal číslo, když se zobrazí výzva „Zadejte číslo:“, můžete použít skript s některé opravy jako:

#!/bin/bash echo -n "Please enter a number: " read number default=10 sum=`echo "$number + $default" | bc` echo "The sum of $number and 10 is $sum." 

Zkontrolovat:

./temp.sh Please enter a number: 50 The sum of 50 and 10 is 60. 

Pokud chcete nás Pokud chcete zadat číslo jako argument skriptu, můžete použít skript níže:

#!/bin/bash number="$1" default=10 sum=`echo "$number + $default" | bc` echo "The sum of $number and 10 is $sum." 

Zkontrolovat:

./temp.sh 50 The sum of 50 and 10 is 60. 

Komentáře

  • Proč se obtěžovat spuštěním bc jen kvůli jednoduché celočíselné aritmetice?

Odpověď

Neměli byste mít mezery mezi „default = 10“ & „sum = $“, také výchozí & číslo by mělo mít před sebou $, aby bylo možné číst z proměnných.

Skript pak funguje podle očekávání, když je napsán níže;

#!/bin/bash echo -n "Please enter a number: " read number default=10 sum=$(($default + $number)) echo "The sum of $number and 10 is $sum." 

Komentáře

  • No vidím! Už to mám. Byl to jen problém s mezerami. Opravdu jsem si to myslel. Děkujeme za pomoc!
  • Pamatujte, že nemusíte ' t používat $ uvnitř aritmetického výrazu. Vyzkoušejte například toto: num=5;def=10;echo "sum = $((num + def))"

Odpovědět

Toto je nejrychlejší způsob, jak požadovat:

#!/bin/bash echo "The sum of $1 + 10 is $(($1 + 10))." 

Výstup:

creme@fraiche:~/$ ./script.sh 50 The sum of 50 + 10 is 60. 

Komentáře

  • které by mohly být nebezpečné – zkuste ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Velmi přesné, ale pro cvičení I ' si nejsem jistý, jestli jde o problém. Bez ohledu na to vám děkujeme za komentář.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *