วิธีเพิ่มตัวแปรทางคณิตศาสตร์ในสคริปต์


26

ฉันต้องการสะสมขนาดบรรทัดของไฟล์จำนวนหนึ่งที่มีอยู่ในโฟลเดอร์ ฉันได้เขียนสคริปต์ต่อไปนี้:

let a=0
let num=0
for i in folder/*
do
        num=`cat $i | wc -l`
        a=$a+$num
done
echo $a

สิ่งที่ฉันได้รับในตอนท้ายของสคริปต์คือ 123 + 234 + 432 + ... และไม่ใช่ผลลัพธ์ของการดำเนินการทางคณิตศาสตร์ของการเพิ่ม

คำตอบ:


50

ไวยากรณ์การประเมินผลทางคณิตศาสตร์ของคุณผิด ใช้ใด ๆ ดังต่อไปนี้ (ครั้งแรกเป็นแบบพกพามาก แต่ช้าที่สองคือ POSIX และแบบพกพายกเว้นบอร์นเปลือกและรุ่นก่อนหน้าของ Almquist เปลือกช่วงสามต้องksh, bashหรือzsh):

a=`expr "$a" + "$num"`

a=$(($a+$num))

((a=a+num))

let a=a+num

((a+=num))

หรือคุณสามารถข้ามforลูปทั้งหมดและทำ:

wc -l folder/*

หรือถ้าคุณต้องการทั้งหมด:

cat folder/* | wc -l

หรือด้วย zsh และmult_iosตัวเลือก:

wc -l < folder/*

ไม่มีความจำเป็นในการภายใน$ เรียบร้อยแล้ว ((...))a=$((a+num))
Weijun Zhou

หากตัวแปรไม่ได้ถูกตั้งค่าไว้หรือมีค่า Null จะสามารถใช้งานได้หากไม่มีวิธีอื่นในการจัดการ
Bharat

7

คุณสามารถใช้รหัสนี้ได้

    a=`expr $a + $num`
    echo $a

และทำให้แน่ใจว่ามีพื้นที่บนทั้งสองด้านของ + IN "$ a + $ num"


ให้พื้นที่ทั้งสองด้านของตัวดำเนินการทุกครั้งเมื่อใช้คำสั่ง expr สำหรับการคำนวณ
user1678213


1

ขออภัยการแก้ไขก่อนหน้ามีไว้สำหรับโพสต์อื่น ที่นี่เพียงปรับเปลี่ยนเล็กน้อยเพื่อสคริปต์ต้นฉบับ:

ปล่อยให้ = 0
ให้ num = 0
สำหรับฉันในโฟลเดอร์ / *
ทำ
        num = `แมว $ i | ห้องสุขา -l`
        a = $ (echo $ a + $ num | bc)
เสร็จแล้ว
echo $ a

1
ลงคะแนนเนื่องจากคำตอบไม่ปรากฏขึ้นเพื่อตอบคำถาม
Time4Tea

ขออภัยตอนนี้แก้ไขแล้ว
Leo

1

คำตอบต้องระบุว่ารหัสใดถูกต้องในเชลล์ ตัวอย่างเช่นใน bourne Shell ( sh) มีเพียงคำแนะนำต่อไปนี้ที่ถูกต้อง:

a=$((a+num))
a=$(($a+$num))

ในขณะที่ความเป็นไปได้อื่น ๆ ที่ระบุโดย @ manatwork อาจใช้ได้ใน bourne อีกครั้ง shell ( bash)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.