ข้อผิดพลาดของสคริปต์ทุบตี: ./test: บรรทัด 5: UID: ตัวแปรแบบอ่านอย่างเดียว


9

ฉันมีสคริปต์ที่ใช้งานได้บนเซิร์ฟเวอร์ dev ของฉัน แต่เมื่อฉันพยายามเรียกใช้ในการผลิตไม่ทำงาน

ฉันได้รับข้อผิดพลาดต่อไปนี้ซึ่งฉันไม่สามารถหาได้:

./test.sh: บรรทัด 5: UID: ตัวแปรแบบอ่านอย่างเดียว

ข้อเสนอแนะใด ๆ

#!/bin/sh

    while read inputline
    do
     UID="$(echo $inputline | cut -d '"' -f4)"
     PASSWORD="$(echo $inputline | cut -d '"' -f8)"
     FIRST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f1)"
     LAST="$(echo $inputline | cut -d '"' -f6 | cut -d ' ' -f2)"    

    zmprov createAccount $UID $PASSWORD displayName "$FIRST $LAST" givenName $FIRST sn $LAST    

    done < company.csv

คำตอบ:


17

เป็นความคิดที่ดีที่จะใช้ตัวแปรตัวพิมพ์เล็กในเชลล์สคริปต์ของคุณเนื่องจากโดยปกติแล้วตัวแปรตัวพิมพ์ใหญ่จะถูกสงวนไว้สำหรับเชลล์ภายใน (ตัวแปรสภาพแวดล้อมเป็นข้อยกเว้นสำหรับสิ่งนี้ แต่ควรได้รับการปฏิบัติเช่นเดียวกันเนื่องจากสิ่งที่มีความหมายพิเศษที่คุณไม่ควรเปลี่ยนแปลงโดยพลการโดยไม่เข้าใจว่าคุณกำลังทำอะไร) ในกรณีนี้bashตั้งค่า$UIDเป็น Unix uid ใต้และจะไม่อนุญาตให้เปลี่ยนแปลงหรือใช้เป็นตัวแปรสำหรับสิ่งอื่น เชลล์ที่ไม่ใช่bash( shอาจเป็นdashหรือบางเชลล์อื่น ๆ ในบางแพลตฟอร์ม) อาจไม่ใช้$UIDวิธีนั้นและหากbashสร้างขึ้นเพื่อทำงานในโหมดความเข้ากันได้ของเชลล์เป้าหมายเมื่อเรียกใช้เป็นsh(ซึ่งเป็นค่าเริ่มต้น แต่การกระจาย Linux จำนวนมากปิดใช้งาน) รักษา$UID พิเศษเช่นกัน


5

UIDเป็นระบบที่สงวนไว้ซึ่งมีข้อมูลเกี่ยวกับรหัสผู้ใช้ที่สคริปต์ของคุณกำลังทำงานอยู่ คุณควรระวังที่จะไม่ใช้ชื่อตัวแปรมาตรฐานที่ระบบอาจใช้ คุณสามารถใช้envเพื่อรับรายการสิ่งที่ตั้งค่าไว้ในปัจจุบัน อย่าเปลี่ยนสิ่งเหล่านี้ คุณอาจใช้ชื่อตัวแปร google เพื่อดูว่าพวกเขาปรากฏตัวในผู้ใช้รายอื่นก่อนที่จะไปกับพวกเขาหรือไม่

ในกรณีนี้การใช้ตัวพิมพ์เล็กอาจจะแก้ปัญหาของคุณได้เนื่องจากมีการสงวนเฉพาะรุ่นตัวพิมพ์ใหญ่เท่านั้น แต่คุณสามารถทำให้ตัวแปรของคุณไม่ซ้ำกันโดยเรียกสิ่งเหล่านี้เช่น $ input_uid ดังนั้นจึงเป็นที่ชัดเจนว่าค่านั้นมาจากอินพุตไปยังสคริปต์ สิ่งนี้จะทำให้รหัสของคุณง่ายต่อการบำรุงรักษาในระยะยาว

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