Materi
Di Administrasi Linux Dasar, skrip menerima argumen dalam jumlah tetap: $1 untuk cabang, $2 untuk shift kerja. Skrip yang dipakai orang lain sering menerima daftar yang panjangnya tidak tentu, misalnya beberapa nama cabang atau beberapa berkas sekaligus. Untuk itu bash menyediakan "$@": semua argumen, masing-masing tetap menjadi satu kata walaupun berisi spasi.
#!/bin/bash
# cabang.sh — dipanggil: bash cabang.sh Medan "Kota Baru" Solo
echo "Ada $# cabang"
for c in "$@"; do
echo "Cabang: $c"
doneKutip ganda di sekitar $@ adalah bagian pentingnya. Tanpa kutip, $@ dan $* dipecah lagi di setiap spasi, sehingga Kota Baru menjadi dua putaran: Kota dan Baru. "$*" kebalikannya: semua argumen digabung menjadi satu kata. Hanya "$@" yang menjaga batas argumen persis seperti yang diketik pemanggil.
shift membuang argumen pertama dan menggeser sisanya: $2 menjadi $1, $3 menjadi $2, dan $# berkurang satu. shift 2 membuang dua sekaligus. Pola yang sering muncul: argumen pertama punya arti khusus, misalnya folder tujuan, dan sisanya daftar berkas. Simpan dulu $1 ke variabel, jalankan shift, lalu "$@" tinggal berisi daftar berkas.
TUJUAN=$1
shift
mkdir -p "$TUJUAN"
cp "$@" "$TUJUAN"/Kesalahan umum: menjalankan shift sebelum menyimpan $1, sehingga nilainya hilang; dan menulis $@ tanpa kutip, yang baru ketahuan saat ada nama berspasi. Di dalam fungsi, "$@", $#, dan shift bekerja pada argumen fungsi itu, bukan argumen skrip.