Chào các bạn, nhằm giúp các bạn áp dụng lập trình bash shell vào thực tế hoặc làm bài tập bash shell thi cử. Thì mình sẽ cung cấp những bài tập cơ bản và nâng cao giúp các bạn trao dồi kĩ năng lập trình bash shell.
Mình không thuần là coder, nên tư duy lập trình có thể sẽ không hay bằng các bạn coder thuần nên nếu các bài tập kèm lời giải, các bạn thấy có cách hay hơn thì cứ áp dụng và chia sẻ mọi người cùng biết nhé.
Bài tập “Tìm username có tên dài nhất và ngắn nhất trên Linux”
Đề bài:
– Lập trình bash shell để tìm username có tên dài nhất và ngắn nhất trên Linux.
– Mức độ : cơ bản.
Code mẫu:
– Đầu tiên, ta cần xác định là thông tin tên username trên Linux nằm ở file ‘/etc/passwd‘, ở cột thứ 1. Vậy nên ta sẽ filter cột thứ 1 với kí tự phân cách là ‘:‘.
– Kế đến ta sẽ lấy độ dài của từng cái tên, rồi so sánh chúng với các giá trị MAX và MIN đã gán trước đó.
– Download code mẫu : LINK
#!/bin/bash # Author : Quach Chi Cuong # Site : https://cuongquach.com/ # Khai bao bien # Delcare neccessary variables MAX_LENGTH_NAME=0 MIN_LENGTH_NAME=0 WHO_NAME="unknown" count=0 # Lay thong tin ten tung username for name in $(cat /etc/passwd | cut -d':' -f1) do # Lay thong tin do dai cua bien 'name' # Get the length of name LENGTH_NAME=${#name} # So sanh do dai lon nhat, ai dai hon gan bien max cho nguoi do # Compare two length number, assign max number to max length. if [ ${LENGTH_NAME} -gt ${MAX_LENGTH_NAME} ];then MAX_LENGTH_NAME="${LENGTH_NAME}" WHO_MAX_NAME="${name}" fi # So sanh do dai nho nhat, ai nho hon gan bien min cho nguoi do. if [ "${count}" -eq 0 ];then MIN_LENGTH_NAME="${LENGTH_NAME}" ((count++)) else if [ ${LENGTH_NAME} -lt ${MIN_LENGTH_NAME} ];then MIN_LENGTH_NAME="${LENGTH_NAME}" WHO_MIN_NAME="${name}" fi fi done # In thong tin ten dai nhat va ngan nhat # Print infor indicate whose max length name and min length name echo "- Max length name is: $WHO_MAX_NAME - $MAX_LENGTH_NAME" echo "" echo "- Min length name is: $WHO_MIN_NAME - $MIN_LENGTH_NAME" exit 0
Output:
- Max length name is: shutdown - 8 - Min length name is: lp - 2