Bạn không đề cập đến loại vỏ nào bạn dự định sử dụng, vì vậy tôi sẽ giả sử bash, mặc dù đây là những thứ khá chuẩn trên vỏ.
Đối số tệp
Các đối số có thể được truy cập thông qua các biến $1
- $n
( $0
trả về lệnh được sử dụng để chạy chương trình). Giả sử tôi có một tập lệnh chỉ cat
xuất ra n số tệp với dấu phân cách giữa chúng:
#!/usr/bin/env bash
#
# Parameters:
# 1: string delimiter between arguments 2-n
# 2-n: file(s) to cat out
for arg in ${@:2} # $@ is the array of arguments, ${@:2} slices it starting at 2.
do
cat $arg
echo $1
done
Trong trường hợp này, chúng tôi đang chuyển một tên tệp cho mèo. Tuy nhiên, nếu bạn muốn chuyển đổi dữ liệu trong tệp (không cần viết và viết lại rõ ràng), bạn cũng có thể lưu trữ nội dung tệp trong một biến:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
Đọc từ stdin
Theo như đọc từ stdin, hầu hết các shell đều có read
nội dung khá chuẩn , mặc dù có những khác biệt về cách nhắc nhở được chỉ định (ít nhất là).
Trang người dùng Bash dựng sẵn có một lời giải thích khá súc tích read
, nhưng tôi thích trang Bash Hackers hơn .
Đơn giản:
read var_name
Nhiều biến
Để đặt nhiều biến, chỉ cần cung cấp nhiều tên tham số cho read
:
read var1 var2 var3
read
sau đó sẽ đặt một từ từ stdin vào mỗi biến, bỏ tất cả các từ còn lại vào biến cuối cùng.
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
Nếu ít từ được nhập hơn biến, các biến còn lại sẽ trống (ngay cả khi được đặt trước đó):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
Nhắc
Tôi sử dụng -p
cờ thường xuyên cho một dấu nhắc:
read -p "Enter filename: " filename
Lưu ý: ZSH và KSH (và có lẽ những người khác) sử dụng một cú pháp khác nhau cho lời nhắc:
read "filename?Enter filename: " # Everything following the '?' is the prompt
Giá trị mặc định
Đây thực sự không phải là một read
mẹo, nhưng tôi sử dụng nó rất nhiều kết hợp với read
. Ví dụ:
read -p "Y/[N]: " reply
reply=${reply:-N}
Về cơ bản, nếu biến (trả lời) tồn tại, hãy trả về chính nó, nhưng nếu trống, hãy trả về tham số sau ("N").