Tôi đang cố gắng tạo một tập lệnh Bash sẽ trích xuất đối số cuối cùng được đưa ra từ dòng lệnh thành một biến để sử dụng ở nơi khác. Đây là kịch bản tôi đang làm:
#!/bin/bash
# compact - lưu trữ và nén tập tin/thư mục
đánh giá CUỐI CÙNG=\$$#
TỆP="$@"
TÊN=$HỌ
# Sử dụng - hiển thị cách sử dụng nếu không có tham số nào được cung cấp
nếu [[ -z $NAME ]]; thì
echo "compact ... .tar.gz" ra là
# Kiểm tra xem tên lưu trữ đã được cung cấp chưa nếu [[ -f $NAME ]]; thì echo "Tệp đã tồn tại hoặc bạn quên nhập tên tệp. Đang thoát." ra là
tar -czvpf "$NAME".tar.gz $FILES
|
Vì đối số đầu tiên có thể là bất kỳ số nào nên tôi phải tìm cách trích xuất đối số cuối cùng (ví dụ: compact file.a file.b file.d files-abd.tar.gz). Bây giờ tên kho lưu trữ sẽ được đưa vào file cần nén. Có cách nào để làm điều này?
Để xóa mục cuối cùng khỏi một mảng, bạn có thể sử dụng một cái gì đó như thế này:
#!/bin/bash
chiều dài=$(($#-1))
mảng=${@:1:$length}
tiếng vang $ mảng
Cách ngắn hơn:
mảng=${@:1:$#-1}
Nhưng mảng là một Chủ nghĩa Bashism , hãy cố gắng tránh sử dụng chúng :(.
Tôi là một lập trình viên xuất sắc, rất giỏi!