Kesalahan skrip Bash: ./test: baris 5: UID: variabel readonly

9

Saya memiliki skrip yang berfungsi baik pada server dev saya tetapi ketika saya mencoba menjalankannya dalam produksi tidak berfungsi.

Saya mendapatkan kesalahan berikut yang saya tidak tahu:

./test.sh: baris 5: UID: variabel hanya baca

Ada saran?

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

Jawaban:

17

Sebaiknya gunakan variabel huruf kecil dalam skrip shell Anda, karena variabel huruf besar biasanya disediakan untuk internal shell. (Variabel lingkungan adalah pengecualian untuk ini, tetapi harus benar-benar diperlakukan dengan cara yang sama, karena hal-hal dengan makna khusus yang Anda tidak boleh berubah secara sewenang-wenang tanpa memahami apa yang Anda lakukan.) Dalam hal ini, bashsetel $UIDke Unix yang sedang berjalan. di bawah, dan tidak akan mengizinkannya diubah atau variabel digunakan untuk hal lain. Shell selain bash( shmungkin dashatau shell lain pada beberapa platform) mungkin tidak menggunakan $UIDcara itu, dan jika bashdibangun untuk bekerja dalam mode kompatibilitas shell Bourne ketika dipanggil sebagai sh(yang merupakan default, tetapi banyak distribusi Linux menonaktifkannya) ia tidak akan t memperlakukan$UID sebagai spesial juga.

geekosaurus
sumber
5

UIDadalah variabel yang disediakan sistem dengan informasi tentang id pengguna yang menjalankan skrip Anda. Anda harus berhati-hati untuk tidak menggunakan nama variabel standar yang mungkin digunakan sistem. Anda dapat menggunakan envuntuk mendapatkan daftar apa yang saat ini ditetapkan. Jangan ubah itu. Anda mungkin juga nama variabel google untuk melihat apakah mereka muncul di pengguna lain sebelum Anda melanjutkan dengan mereka.

Dalam hal ini, menggunakan huruf kecil mungkin akan memperbaiki masalah Anda karena hanya varian huruf besar yang dicadangkan, tetapi Anda juga dapat membuat variabel Anda unik dengan memanggil mereka sesuatu seperti $ input_uid sehingga jelas bahwa nilai berasal dari input ke skrip. Ini akan membuat kode Anda lebih mudah dipertahankan dalam jangka panjang.

Caleb
sumber