Score:0

จะเพิ่มค่าจำนวนเต็มสองค่าใน Linux ได้อย่างไร?

ธง cn
#!/bin/bash

ซีดี /หน้า
file=`ls -l |awk '{พิมพ์ $9}'`
รายการ=()
สำหรับฉันในไฟล์ $
ทำ
  เสียงสะท้อน $i
  a=`แมว /pg/$i | หัว -n 1 |awk '{พิมพ์ $8}'`
  b=`แมว /pg/$i | หัว -n 2 |awk '{พิมพ์ $8}'`
  #a1=`เสียงสะท้อน "$a" | tr -d '"'`
  #b1=`echo "$b" | tr -d '"'`
  เสียงสะท้อน $a
  เสียงสะท้อน $b
  c="$(($a+$b))"
  รายการ = ($ ค)
  #a1=`แมว /pg/$i | หัว -n 2 |awk '{พิมพ์ $8}'`
เสร็จแล้ว

ขณะดำเนินการโค้ดด้านบน ฉันได้รับข้อผิดพลาดด้านล่าง โปรดช่วยฉันแก้ไขปัญหาเอาต์พุตของค่าคือ ก=30 และ ข=30 แต่ยังไม่สามารถเพิ่มทั้งสองอย่างได้

/bin/max_timetrack.sh: บรรทัด 16: 30+30
30: ข้อผิดพลาดทางไวยากรณ์ในนิพจน์ (โทเค็นข้อผิดพลาดคือ "30")
Score:5
ธง in

ข้อผิดพลาดของคุณอยู่ในบรรทัดนี้:

b=`แมว /pg/$i | หัว -n 2 |awk '{พิมพ์ $8}'`

ศีรษะ จะไม่ให้บรรทัดที่สองแก่คุณ แต่ บรรทัดแรก
ดังนั้น จะเป็น:

30
30

และไม่ 30 วิธีที่คุณพูด ดังนั้นข้อผิดพลาด

30+30
30

คุณต้องการ (ในขณะที่รักษาโครงสร้างที่ซับซ้อนของคุณ):

b=`แมว /pg/$i | หัว -n 2 |awk '{พิมพ์ $8}' | หาง -n 1`

อย่างไรก็ตาม!

มีการใช้สิ่งต่าง ๆ ที่ไร้ประโยชน์ / แปลก ๆ มากมายในสคริปต์เล็ก ๆ ของคุณ:

เท่านี้ก็เพียงพอแล้ว:

b=$(awk 'NR==2{พิมพ์ $8}' "/pg/$i")

หมายเหตุการใช้ $(...) แทน backticks ซึ่งเหมือนกัน แต่จะเป็นที่ต้องการ.

เหมือนกันกับบรรทัดนี้

a=`แมว /pg/$i | หัว -n 1 |awk '{พิมพ์ $8}'`

จะดีกว่า

a=$(awk 'NR==1{พิมพ์ $8}' "/pg/$i")

อย่างไรก็ตาม คุณสามารถคำนวณเลขคณิตได้ภายใน อึดอัด เท่านั้น:

c=$(awk 'NR<=2{sum+=$8}END{print sum}')

นอกจากนี้คุณยังเป็น การแยกวิเคราะห์ ซึ่งเป็นตัวเลือกที่ไม่ดี:

ไฟล์=`ls -l | awk '{พิมพ์ $9}'`

แค่นี้ไม่ได้เหรอ

สำหรับฉันใน *; ทำ ... เสร็จแล้ว

ขึ้นอยู่กับว่าคุณต้องการทำอะไร คุณอาจเขียนสคริปต์ทั้งหมดเป็นหนึ่งเดียวได้ อึดอัด สั่งการ.

hariraj avatar
cn flag
ขอบคุณ Mr.PLumo คำตอบข้างต้นใช้ได้ผลสำหรับฉัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา