Shell functions là thứ hại não nhất trong lập trình shell. hôm nay chúng ta sẽ cùng tìm hiểu về cấu trúc của nó.
Cấu trúc cơ bản của một Shell functions có dạng như sau
function_name () {
list commands
}
Trong đó phần list commands là tập hợp các câu lệnh xử lý để trả về kết quả nào đó
ví dụ:
#!/bin/sh
Hello () {
ts="$(awk "BEGIN {print sqrt($2)}")"
echo "$ts"
}
Hello 25 225
Kết quả khi chạy sẽ là
15
Các bạn chú ý một điểm khi các bạn chạy lệnh gọi functions thì trong functions nó đã quy định một số hàm sẵn theo vị trí từ trái qua phải. trong ví dụ trên khi mình chạy lệnh 'Hello 25 225' thì thứ tự các trong function sẽ là
$1 là 25
$2 là 225
Chính vì thế mà các bạn thấy trong function không hề có bước gán biến mà vẫn gọi hàm bình thường.
một ví dụ dưới đây về thêm user cho hệ thống
#!/bin/sh
# A simple script with a function...
add_a_user()
{
USER=$1
PASSWORD=$2
shift; shift;
COMMENTS=$@
echo "Adding user $USER ..."
echo useradd -c "$COMMENTS" $USER
echo passwd $USER $PASSWORD
echo "Added user $USER ($COMMENTS) with pass $PASSWORD"
}
###
# Main body of script starts here
###
echo "Start of script..."
add_a_user bob paswd pop hol the pre
Ở đây mình thêm user bob với các thông số như sau
user: bob
mật khẩu: paswd
thì trong function nó sẽ quy định luôn
- $1 là bob
- $2 là paswd
- $@ là tất cả những thứ còn lại chưa được gán vào hàm nào cả sẽ dùng $@ để đại diện
Như vậy chúng ta có thể hiểu shell function là tập hợp các lệnh lại để chúng ta gọi khi cần thiết thay vì phải code nhiều lần các loại vòng lặp.
Dựa vào tính chất trên chúng ta có thể lồng nhiều lệnh vào với nhau theo dạng như sau
#!/bin/sh
number_one () {
echo "day la function1"
number_two
}
number_two () {
echo "day la function2"
}
Tùy vào chúng ta dùng lệnh nào thì sẽ cho ra kết quả khác nhau ví dụ với đoạn mã trên chúng ta dùng lệnh number_one thì kết quả sẽ là
day la function1
day la function2
nếu chúng ta dùng lệnh number_two thì kết quả sẽ là
day la function2
ứng dụng của function là làm cho code của chúng ta đơn giản ngắn gọn hơn rất nhiều và quan trọng nó cắt được các chuỗi không cố định khi chúng ta nhập vào.
Mọi thắc mắc xin để lại bình luận mình sẽ giải đáp. chúc các bạn có những giây phút lập trình vui vẻ!
Không có nhận xét nào:
Đăng nhận xét