Komut satırı bağımsız değişkeni olarak nasıl sayı eklersiniz?


10

Komut satırından 1 sayı ve varsayılan gibi bir sayı eklemeye çalışıyorum. Örneğin: Kullanıcı 50 sayısını yazdığında, komut dosyası 10 ekleyecektir (varsayılan sayı olarak).

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

Şimdiye kadar sahip olduğum şey bu.

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."

Sözdizimi yanlış mı? Doğru yolda olup olmadığımdan emin değilim. Numaraları yanlış mı ekliyorum? Bunun yerine awk kullanmalı mıyım?

let sum = $default + $number 

Sadece eklemek yerine, echoing yerine readdoğrudan kullanımı yazabilirsiniz:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Yanıtlar:


2

Alanlar hatalara neden oluyor.

Kullanıcının "Lütfen bir sayı girin:" istendiğinde numarayı girmesini istiyorsanız, komut dosyanızı aşağıdaki gibi bazı düzeltmelerle kullanabilirsiniz:

#!/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."

Kontrol:

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

Kullanıcının numarayı komut dosyasına bağımsız değişken olarak girmesini istiyorsanız, aşağıdaki komut dosyasını kullanabilirsiniz:

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

Kontrol:

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

3
Neden sadece basit tamsayı aritmetiği yapmak için bc'yi çalıştırmıyorsunuz?
PM 2Ring

15

"Default = 10" & "sum = $" arasında boşluk bırakmamalısınız, ayrıca varsayılan & sayı değişkenlerden önce okunmaları için $ içermelidir.

Senaryo daha sonra aşağıdaki gibi yazıldığında benim için beklendiği gibi çalışır;

#!/bin/bash

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

Ah anlıyorum! Şimdi anladım. Bu sadece bir boşluk sorunuydu. Bunu gerçekten çok düşündüm. Yardım için teşekkürler!
techiegeek

3
O Not yok kullanmaya gerek $aritmetik ifadenin içinde. Örneğin, şunu deneyin:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring

4

İstediğinizi yapmanın en hızlı yolu budur:

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

Çıktı:

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

1
tehlikeli olabilir - deneyin./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv

@mikeserv Çok doğru, ancak egzersiz için bir endişe olup olmadığından emin değilim. Ne olursa olsun yorumunuz için teşekkür ederiz.
cremefraiche
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.