Lỗi tập lệnh Bash: ./test: dòng 5: UID: biến chỉ đọc


9

Tôi có một tập lệnh hoạt động tốt trên máy chủ dev của tôi nhưng khi tôi cố chạy nó trong sản xuất thì không hoạt động.

Tôi đang gặp phải lỗi sau mà tôi không thể tìm ra:

./test.sh: dòng 5: UID: biến chỉ đọc

Bất kỳ đề xuất?

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

Câu trả lời:


17

Đó là một ý tưởng tốt để sử dụng các biến chữ thường trong tập lệnh shell của bạn, vì các biến chữ hoa thường được dành riêng cho nội bộ shell. (Biến môi trường là một ngoại lệ đối với điều này, nhưng thực sự nên được xử lý theo cùng một cách, vì những thứ có ý nghĩa đặc biệt mà bạn không nên tự ý thay đổi mà không hiểu bạn đang làm gì.) Trong trường hợp này, hãy bashđặt $UIDcho Unix uid nó đang chạy bên dưới, và sẽ không cho phép nó được thay đổi hoặc biến được sử dụng cho bất cứ điều gì khác. Các shell khác bash( shcó thể dashhoặc một số shell khác trên một số nền tảng) có thể không sử dụng $UIDtheo cách đó và nếu bashđược xây dựng để hoạt động ở chế độ tương thích shell Bourne khi được gọi là sh(mặc định, nhưng nhiều bản phân phối Linux sẽ vô hiệu hóa) nó đã thắng ' t điều trị$UID cũng đặc biệt


5

UIDlà một biến dành riêng cho hệ thống với thông tin về id người dùng mà tập lệnh của bạn đang chạy. Bạn nên cẩn thận không sử dụng tên biến tiêu chuẩn mà hệ thống có thể đang sử dụng. Bạn có thể sử dụng envđể có được một danh sách những gì hiện đang được thiết lập. Đừng thay đổi bất kỳ thứ gì trong số đó. Bạn cũng có thể google tên biến để xem họ có xuất hiện ở những người dùng khác hay không trước khi bạn tiếp tục với họ.

Trong trường hợp này, sử dụng chữ thường có thể sẽ khắc phục vấn đề của bạn vì chỉ có các biến thể chữ hoa được bảo lưu, nhưng bạn cũng có thể làm cho các biến của mình trở nên duy nhất bằng cách gọi chúng là một cái gì đó như $ input_uid để rõ ràng giá trị đó đến từ đầu vào cho tập lệnh. Điều này sẽ làm cho mã của bạn dễ dàng hơn để duy trì trong thời gian dài.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.