Shell Script - Tiếp Nối (P2)
Bài đăng này đã không được cập nhật trong 5 năm
Ở phần trước, chúng ta đã làm quen cơ bản với cách sử dụng shellcript (tạo và thực thi shellscript, biến,...). Bây giờ, chúng ta tiếp tục đến với các đặc điểm tiếp theo của nó nhé!
Các ký tự trong shellscript
Chúng ta đã thấy rằng việc sử dụng ký tự dấu ngoặc kép "
ảnh hưởng đến cách xử lý khoảng trắng và ký tự TAB trong shellscript
➜ ~ echo Hello Hello
Hello Hello
➜ ~ echo "Hello Hello"
Hello Hello
- Vậy làm thế nào để chúng ta có thể hiển thị được text:
➜ ~ Hello "Hello"
- Để làm được điều ấy chúng ta có thể làm như đoạn code bên dưới, tức là sẽ thêm
"
vào đầu và cuối dãy ký tự, cộng với việc thêm\
vào đầu và cuối"Hello"
để có thể vẫn giữ được khoảng cách giữa hai từ.
➜ ~ echo "Hello \"Hello"\"
Hello "Hello"
- Tuy nhiên, nếu chúng ta viết:
➜ ~ echo "Hello " Hello ""
- Nó sẽ được hiểu là ba tham số:
- "Hello "
- Hello
- ""
- Vì vậy, đầu ra sẽ là
Hello Hello
Ký tự *
được dùng theo nhiều mục đích khác nhau:
➜ ~ echo *
Videos Desktop Documents Downloads examples.desktop example.sh code.txt image.png
➜ ~ echo *png
image.png
➜ ~ echo "*"
*
➜ ~ echo "*png"
*png
- Trong VD đầu tiên,
*
được dùng để liệt kê tất cả các tệp trong thư mục hiện tại. - Trong VD thứ hai,
*txt
dùng để liệt kê tất cả các tệp kết thúc bằng txt. - Trong VD thứ 3 , ta đặt dấu
*
trong dấu ngoặc kép và nó được hiểu là text bình thường. (VD thứ 4 tương tự).
Tiếp theo là các ký tự ", $, \
:
- Ký tự
\
được sử dụng để đánh dấu các ký tự đặc biệt mà các ký tự này không được giải thích bởi shellscript. Ví dụ, chúng ta muốn in ra một đoạn text như sau:
A quote is ", backslash is \, backtick is `.
I have $D is 5$.
- Chúng ta sẽ viết như sau:
➜ ~ echo "A quote is \", backslash is \\, backtick is \`."
A quote is ", backslash is \, backtick is `.
➜ ~ echo "I have \$D is 5$."
I have $D is 5$.
Vòng lặp (Loop)
For Loops
for
có tác dụng lặp qua một tập hợp các giá trị cho đến khi phần tử cuối cùng của danh:
#!/bin/sh
for i in 1 2 3 4 5
do
echo "Hello $i"
done
và ta kết quả trả về:
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
- Ví dụ 2:
#!/bin/sh
for i in hello 1 *png 2 goodbye
do
echo "Hello...$i"
done
- kết quả thu được:
Hello...hello
Hello...1
Hello...image1.png
Hello...image2.png
Hello...image3.png
Hello...2
Hello...goodbye
- Ở đây nó sẽ lặp từ phần tử
hello
, rồi lặp tiếp những file đuôi png trong thư mục hiện tại, cuối cùng là đến phần tửgoodbye
.
While Loops
while
được sử dụng để thực thi nhiều lần một đoạn chương trình, khi một điều kiện vẫn còn đúng. Vòng lặpwhile
thường được sử dụng khi số lần lặp không được xác định trước với cú pháp dùng nó như sau:
while [ condition ]
do
command1
command2
...
done
- Ví dụ:
#!/bin/sh
while [ "$INPUT_STRING" != "bye" ]
do
echo "Please type something in (bye to quit)"
read INPUT_STRING
echo "Please input again"
done
- Ở đây, nếu ta không nhập đúng
"bye"
cho đoạn code trên nó sẽ được chạy vô thời hạn. - Nếu bạn muốn sử dụng một vòng lặp vô hạn mà không cần quan tâm đến điều kiện là gì ta có thể dùng cách sau:
#!/bin/bash
while :
do
echo "infinite loops... => Please press CTRL+C to stop"
done
- Đọc tệp văn bản bằng lệnh read:
- Bạn có thể đọc tệp văn bản bằng lệnh read và vòng lặp while như sau:
#!/bin/bash
file=/etc/resolv.conf #path if you want
while read line
do
echo $line # echo line is stored in $line
done < "$file"
- Kết quả trả về:
nameserver 127.0.0.1
nameserver 192.168.1.254
nameserver 5.4.4.1
- Sử dụng câu lệnh break để thoát ra khỏi vòng lặp:
- câu lệnh break được sử dụng để thoát khỏi vòng lặp sớm dựa trên một điều kiện cụ thể. Ví dụ:
#!/bin/bash
n=1
while [ $n -le 10 ]
do
if [ $n == 6 ]
then
echo "Stop because n=6"
break
fi
echo "Number: $n"
(( n++ ))
done
- Kết quả thu được:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
Stop because n=6
- Sử dụng câu lệnh continue để bỏ qua một bước cụ thể:
#!/bin/bash
n=0
while [ $n -le 6 ]
do
(( n++ ))
if [ $n == 4 ]
then
continue
fi
echo "Number: $n"
done
- Khi vòng lặp này lặp lại lần thứ 4 thì vòng lặp sẽ đi đến lần lặp tiếp theo mà không in văn bản của text
Number: 4
ra. Và khi đó ta thu được kết quả sau:
Number: 1
Number: 2
Number: 3
Number: 5
Number: 6
Number: 7
Cảm ơn các bạn đã đọc bài viết của mình!
All rights reserved