|
| 1 | + |
| 2 | + |
| 3 | + |
| 4 | +# Tìm hiểu Shell trong Linux |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | +## 1 . Shell là gì ? |
| 9 | +Shell là chương trình giao tiếp với người dùng. Có nghĩa là shell chấp nhận các lệnh từ bạn (keyboard) và thực thi nó. Nhưng nếu bạn muốn sử dụng nhiều lệnh chỉ bằng một lệnh, thì bạn có thể lưu chuỗi lệnh vào text file và bảo shell thực thi text file này thay vì nhập vào các lệnh. Điều này gọi là shell script. |
| 10 | + |
| 11 | +Định nghĩa: **Shell script** là một chuỗi các lệnh được viết trong plain text file. Shell script thì giống như batch file trong MS-DOS nhưng mạnh hơn. |
| 12 | + |
| 13 | +Tại sao phải viết shell script: |
| 14 | + |
| 15 | +• Shell script có thể nhận input từ user, file hoặc output từ màn hình. |
| 16 | + |
| 17 | +• Tiện lợi để tạo nhóm lệnh riêng. |
| 18 | + |
| 19 | +• Tiết kiệm thời gian. |
| 20 | + |
| 21 | +• Tự động làm một vài công việc thường xuyên. |
| 22 | + |
| 23 | +## 2. Tạo, thực thi chương trình Shell |
| 24 | + |
| 25 | +* Khởi tạo tập tin `hello_world.sh |
| 26 | +``` |
| 27 | +[root]cat hello_world.sh |
| 28 | +#!bin/bash |
| 29 | +
|
| 30 | +echo "Hello World !!" |
| 31 | +``` |
| 32 | +##### Lưu ý : Dòng đầu tiên chúng ta luôn đặt #!/bin/bash, đây là cú pháp bắt buộc. Sau # được hiểu là comment, chú thích của các đoạn mã. |
| 33 | +* Shell là chương trình cần quyền thực thi nên cần kiểm tra quyền execute cho tập tin trước tiên |
| 34 | +``` |
| 35 | +[root]chmod 777 hello_world.sh |
| 36 | +``` |
| 37 | +* Trên Linux có nhiều lệnh để thực thi một chương trình shell |
| 38 | +``` |
| 39 | +bash hello_world.sh |
| 40 | +sh hello_world.sh |
| 41 | +./hello_world.sh |
| 42 | +``` |
| 43 | +* OUTPUT trả về |
| 44 | +``` |
| 45 | +[root]bash hello_world.sh |
| 46 | +Hello World |
| 47 | +[root] |
| 48 | +
|
| 49 | +``` |
| 50 | + |
| 51 | +### 3. Biến trong Shell |
| 52 | + |
| 53 | +#### 3.1 Trong Shell gồm có 2 loại biến |
| 54 | + |
| 55 | +* Biến hệ thống : |
| 56 | + * được tạo ra và quản lý bởi Linux |
| 57 | + * các biến này là CHỮ HOA |
| 58 | +* Biến người dùng : |
| 59 | + * được tạo ra và quản lý bởi người dùng |
| 60 | + * các biến này là chữ thường |
| 61 | + |
| 62 | +Mốt số biến hệ thống thường gặp |
| 63 | +* $PS1 |
| 64 | +* $HOME |
| 65 | +* $PATH |
| 66 | +* $BASH_VERSION |
| 67 | + |
| 68 | +Các biến hệ thống người dùng hoàn toàn có thể `export ` các giá trị của nó nhưng không được khuyến khích. |
| 69 | +Người dùng sẽ tạo, và quản lý các biến trong space của mình |
| 70 | + |
| 71 | +#### 3.2. Biến , quy tắc đặt biến người dùng |
| 72 | + |
| 73 | +* Cú pháp : |
| 74 | +tên_biến=giá_trị |
| 75 | + Yêu cầu : |
| 76 | + * tên_biến bắt đầu phải là ký tự |
| 77 | + * Không được dùng dấu ? * để đặt tên các biến |
| 78 | + * không có khoảng trống giữa tên biến và giá_trị |
| 79 | + * trong Linux tên biến phân biệt hoa, thường |
| 80 | + Ví dụ : |
| 81 | + ``` |
| 82 | + b=1 # đúng |
| 83 | + ba= 1 # sai |
| 84 | + ba =1 #sai |
| 85 | + 2a==1 # sai |
| 86 | + ``` |
| 87 | + |
| 88 | + |
| 89 | +* IN giá trị biến bằng ECHO |
| 90 | +Cú pháp `echo [option] $tên_biến` |
| 91 | +Một số ký tự đặt biiệt với tùy chọn -e trong echo: |
| 92 | +- \a alert (bell) |
| 93 | +- \b backspace- |
| 94 | +- \c suppress trailing new line |
| 95 | +- \n new line |
| 96 | +- \r carriage return |
| 97 | +- \t horizontal tab |
| 98 | +- \\ backslash |
| 99 | +Ví dụ |
| 100 | +``` |
| 101 | +[root]echo -e "son\rtran" |
| 102 | +tran |
| 103 | +[root]echo -e "son\ntran" |
| 104 | +son |
| 105 | +tran |
| 106 | +[root]echo -e "son\\tran" |
| 107 | +son ran |
| 108 | +[root]echo -e "son\ttran" |
| 109 | +son tran |
| 110 | +``` |
| 111 | + |
| 112 | +### 4 . Các phép toán số học |
| 113 | + |
| 114 | +Shell cung cấp cho ta một số biểu thức toán học. |
| 115 | + |
| 116 | +**Cú pháp**: |
| 117 | + |
| 118 | +```Powershell |
| 119 | +expr toán_hạng_1 toán_tử toán_hạng_2 |
| 120 | +``` |
| 121 | +Yêu cầu : |
| 122 | +- khoản trống giữa các thành phần tham gia toán hạng |
| 123 | + |
| 124 | +Ví dụ |
| 125 | +``` |
| 126 | +[root]cong=$(expr 1 + 1) |
| 127 | +[root]echo $cong |
| 128 | +2 |
| 129 | +[root]echo $(expr 5 - 1) |
| 130 | +4 |
| 131 | +[root]echo $(expr 9 / 2) |
| 132 | +4 |
| 133 | +[root]echo $(expr 9 \* 2) |
| 134 | +18 |
| 135 | +
|
| 136 | +
|
| 137 | +``` |
| 138 | + |
| 139 | +Cách dấu ngoặc trong Shell |
| 140 | + |
| 141 | +- Tất cả các ký tự trong dấu ngoặc kép đều ( "" ) không có ý nghĩa nghĩa toán, trừ những ký tự sau \ hoặc $$ |
| 142 | +- Dấu nháy ngược (`): nghĩa là yêu cầu thực thi lệnh |
| 143 | + |
| 144 | +Ví dụ |
| 145 | +``` |
| 146 | +[root]echo `expr 1 + 1 ` # thực thiện như một câu l |
| 147 | +2 |
| 148 | +``` |
| 149 | +Kiểm tra trạng thái của một câu lệnh |
| 150 | +``` echo $? ``` |
| 151 | + |
| 152 | +## 5. Cấu trúc điều khiển đầu ra |
| 153 | + |
| 154 | +1. Cấu trúc điều kiện rẽ nhánh ( IF ) |
| 155 | + |
| 156 | +**if** |
| 157 | +``` |
| 158 | +if dieu_kien ; |
| 159 | + then |
| 160 | + cau_lenh |
| 161 | +fi |
| 162 | +
|
| 163 | +``` |
| 164 | +**if...else...fi** |
| 165 | +``` |
| 166 | +if dieu_kien ; |
| 167 | + then |
| 168 | + cau_lenh |
| 169 | + else |
| 170 | + cau_lenh |
| 171 | +fi |
| 172 | +``` |
| 173 | +2. Vòng lặp for |
| 174 | +# for 1 |
| 175 | +``` |
| 176 | +for i in 1 2 3 4 5 |
| 177 | +do |
| 178 | + echo $i |
| 179 | +done |
| 180 | +
|
| 181 | +#output: 1 2 3 4 5 |
| 182 | +
|
| 183 | +#for 2 |
| 184 | +for ((i=0; i<=10; i++)) # bao quanh bằng (()) |
| 185 | +do |
| 186 | +echo $i |
| 187 | +done |
| 188 | +#ouput 1 2 3 4 5 6 7 8 9 10 |
| 189 | +``` |
| 190 | +3. Vòng lặp while |
| 191 | +```Powershell |
| 192 | +while [dieu kien] |
| 193 | +do |
| 194 | +command1 |
| 195 | +done |
| 196 | +``` |
| 197 | + |
| 198 | +## 6 . Một số cú pháp kiếm tra |
| 199 | + |
| 200 | +1. Toán học |
| 201 | + |
| 202 | +| Operation | Meaning | |
| 203 | +|----------|-----------| |
| 204 | +| -eq | Kiểm tra ngang bằng| |
| 205 | +| -ne | Kiểm tra không ngang bằng | |
| 206 | +| -lt | Kiểm tra nhỏ hơn | |
| 207 | +| -le | Kiểm tra nhỏ hơn bằng | |
| 208 | +| -gt | Kiểm tra lớn hơn | |
| 209 | +| -ge | Kiểm tra lớn hơn bằng| |
| 210 | + |
| 211 | +3. Chuỗi |
| 212 | + |
| 213 | +| Operation | Meaning | |
| 214 | +|-----------|----------| |
| 215 | +|sting1 = sting2| Kiiểm tra ngang bằng chuỗi| |
| 216 | +|string1 != string2| Kiểm tra không ngang bằng| |
| 217 | +|-n string1|Kiểm tra biến tồn tại| |
| 218 | + |
| 219 | +4. File , thư mục |
| 220 | + |
| 221 | + |
| 222 | +| Operation | Meaning | |
| 223 | +|-----------|----------| |
| 224 | +|-e file| Kiểm tra tập tin tồn tại hay không| |
| 225 | +|-s | Kiểm tra có phải file trống | |
| 226 | +|- d| Kiểm tra có tồn tại thư mục | |
| 227 | +|-r file| Kiểm tra file có quyền read| |
| 228 | +|-w file|| Kiểm tra file có quyền write| |
| 229 | +|-x file| Kiểm tra file có quyền execute| |
0 commit comments