Shell script là gì
Shell là 1 trong chương trình thông ngôn lệnh của một hệ điều hành, cung cấp cho người dùng khả năng tương tác với hệ điều hành bằng cách gõ từng lệnh ở chế độ dòng lệnh, mặt khác trả lại hiệu quả thực hiện nay lệnh lại cho tất cả những người sử dụng. Shell hỗ trợ tập hợp các lệnh đặc trưng mà trường đoản cú đó có thể tạo yêu cầu chương trình, khi đó được gọi là shell script.
Bạn đang xem: Shell script là gì
Ngoài các lệnh dễ dàng của khối hệ thống Unix shell còn bổ sung cập nhật thêm các cấu trúc phức tạp như điều khiển rẽ nhánh,vòng lặp. Trong MS-DOS thì shell chính là Command, trong Linux thì có rất nhiều loại shell khác biệt như sh, zsh, bash, csh... Trong đó phổ cập nhất vẫn luôn là bash shell (shell mặc định cho tương đối nhiều distro khác nhau).
Shell Prompt
Nếu chúng ta là người sử dụng terminal hằng ngày thì cái các bạn phải bắt gặp nhiều nhất chính là cái call là “Command prompt”, nó chính là cái này:

Phía sau $ chúng ta cũng có thể bắt đầu gõ lệnh
thao
bla-bla ~ $ dateThứ năm, 26 mon mười một năm 2015 17:50:04 ICTChúng ta hoàn toàn có thể làm đuợc các thứ phấn kích với prompt này bằng phương pháp thay biến chuyển PS1, tham khảo thêm ở đây: Bash Shell PS1: 10 Examples to Make Your Linux Prompt like Angelina Jolie
Shell types
Có 2 các loại shell chính:
Bourne shell (mặc định gồm dấu nói lệnh là $ như ngơi nghỉ trên)C shell (dấu kể lệnh là %)Trong Bourne shell còn có các loại khác biệt như:
Bourne shell (sh)Korn shell (ksh)Bourne Again shell (bash)POSIX shell (sh)C shell thì có:
C shell (csh)TENEX/TOPS C shell (tcsh)Shell Script
Về cơ phiên bản shell script là một trong những tập hợp các lệnh được thực thi thông liền nhau, bước đầu 1 shell script thường sẽ có ghi chú comment mở đầu bằng # như này:
thao
bla-bla ~ $ bash test.shXin chào, thao!Hôm ni là ngày đồ vật năm, 26 tháng mười 1 năm 2015 18:19:25 ICT
Biến vào shell
Đặt tên
Như mọi ngôn ngữ khác, tên biến chỉ bao gồm các vần âm a đến z, từ A mang lại Z, chữ số tự 0 cho tới 9 và dấu _, tên phát triển thành không được bắt đầu bằng chữ số.Xem thêm: Recommendation Letter Là Gì Bạn Cần Biết Về Lor, Tất Tần Tật Về Thư Giới Thiệu
Khai báo
variable_name=variable_valueVí dụ:
THAO="Nguyễn nạm Thạo"
Sử dụng
THAO="Nguyễn vắt Thạo"echo $THAOBiến Read-only
Sau lúc khai báo biến này, thì quý giá của trở nên không thể bị núm đổi.Xem thêm: Bài 9: Lịch Sự Là Gì - Nghĩa Của Từ Bất Lịch Sự Trong Tiếng Việt
thao
bla-bla ~ $ THAO="Nguyễn rứa Thạo"thao
bla-bla ~ $ readonly THAOthao
bla-bla ~ $ THAO="Muốn thế Tên Khác"bash: THAO: readonly variable
Xóa quý hiếm của biến
thaobla-bla ~ $ a="value"thao
bla-bla ~ $ echo $avaluethao
bla-bla ~ $ unset athao
bla-bla ~ $ echo $athao
bla-bla ~ $
Các nhiều loại biến
Biến hệ thống: tạo nên và thống trị bởi system, thương hiệu là chữ hoa, ví dụthaobla-bla ~ $ echo $SHELL/bin/bashthao
bla-bla ~ $ echo $TERMxtermBiến do người tiêu dùng định nghĩa: tạo thành và làm chủ bởi bạn dùng, tên lung tung, thỏa mãn nhu cầu yêu cầu đặt tên của shell.
Mảng
NAME<0>="Zara"NAME<1>="Qadir"NAME<2>="Mahnaz"NAME<3>="Ayan"NAME<4>="Daisy"Nếu sử dụng ksh shell thì có thể khai báo:set -A array_name value1 value2 ... ValuenNếu cần sử dụng bash shell thì khai báo vắt này:
array_name=(value1 ... Valuen)Để sử dụng 1 quý hiếm trong mảng:
$array_name
$array_name<*>$array_name<
>Ví dụ:
#!/bin/shNAME<0>="Zara"NAME<1>="Qadir"NAME<2>="Mahnaz"NAME<3>="Ayan"NAME<4>="Daisy"echo "First Index: $NAME<0>"echo "Second Index: $NAME<1>"echo "First Method: $NAME<*>"echo "Second Method: $NAME<
>"Kết quả:
$./test.shFirst Index: ZaraSecond Index: QadirFirst Method: Zara Qadir Mahnaz Ayan DaisySecond Method: Zara Qadir Mahnaz Ayan Daisy
Các phép toán số học
Để triển khai các phép toán số học, cần dùng expr nhằm thực hiện:#!/bin/shval=`expr 2 + 2`echo "Total value : $val"Kết quả:
Total value : 4Với $a có giá trị 10 với $b có mức giá trị 20, ta tất cả bảng sau:
+ | Phép cộng | expr $a + $b trả kết quả 30 |
- | Phép trừ | expr $a - $b trả hiệu quả -10 |
* | Phép nhân | expr $a * $b trả hiệu quả 200 |
/ | Phép chia | expr $b / $a trả kết quả 2 |
% | Phép phân tách lấy dư | expr $b % $a trả tác dụng 0 |
= | Gán giá chỉ trị | a=$b quý giá của b đã gán đến $a, giờ $a có giá trị là 20 |
== | So sánh bằng, trả về true ví như 2 phát triển thành cùng giá chỉ trị | < $a == $b > trả về false |
!= | So sánh không bằng, trả về true ví như 2 trở nên khác giá bán trị | < $a == $b > trả về true |
Phép toán quan liêu hệ
Vẫn cùng với $a có mức giá trị 10 với $b có mức giá trị 20, ta tất cả bảng sau:
-eq | Kiểm tra quý giá 2 toán tử có cân nhau hay không, bởi thì trả về true | < $a -eq $b > trả công dụng không cần là true |
-ne | Kiểm tra quý hiếm 2 toán tử có đều nhau hay không, không thì trả về true | < $a -ne $b > trả tác dụng true |
-gt | Kiểm tra giá trị của toán tử phía trái có lớn hơn giá trị bên nên hay không, gồm trả về true | < $a -gt $b > trả hiệu quả không nên là true |
-lt | Kiểm tra quý hiếm của toán tử phía trái có bé dại hơn giá trị bên yêu cầu hay không, tất cả trả về true | < $a -lt $b > trả kết quả true |
-ge | Kiểm tra cực hiếm của toán tử phía bên trái có to hơn hoặc bởi giá trị bên đề nghị hay không, tất cả trả về true | < $a -ge $b > trả tác dụng không phải là true |
-le | Kiểm tra quý hiếm của toán tử bên trái có bé dại hơn hoặc bằng giá trị bên buộc phải hay không, gồm trả về true | < $a -le $b > trả công dụng là true |
Cấu trúc rẽ nhánh
Ví dụ:
#!/bin/sha=10b=20if < $a == $b >then echo "a is equal khổng lồ b"fiif < $a == $b >then echo "a is equal to b"elif < $a -gt $b >then echo "a is greater than b"elif < $a -lt $b >then echo "a is less than b"else echo "None of the condition met"fi
Cấu trúc lặp
Vòng lặp while#!/bin/sha=0while < $a -lt 10 >do echo $a a=`expr $a + 1`doneVòng lặp for#!/bin/shfor var in 0 1 2 3 4 5 6 7 8 9do echo $vardoneVòng lặp until#!/bin/sha=0until < ! $a -lt 10 >do echo $a a=`expr $a + 1`doneVòng lặp select#!/bin/kshselect DRINK in tea cofee water juice appe all nonedo case $DRINK in tea|cofee|water|all) echo "Go lớn canteen" ;; juice|appe) echo "Available at home" ;; none) break ;; *) echo "ERROR: Invalid selection" ;; esacdoneKết trái của vòng select$./test.sh1) tea2) cofee3) water4) juice5) appe6) all7) none#? juiceAvailable at home#? none
Hàm
#!/bin/sh# Define your function hereHello () echo "Hello World"# Invoke your functionHelloChạy script$./test.shHello WorldDùng hàm với parameters:
#!/bin/sh# Define your function hereHello () echo "Hello World $1 $2 $3"# Invoke your functionHello Nguyễn rứa ThạoKết quả:
$./test.shHello World Nguyễn nỗ lực ThạoLấy tác dụng trả về từ bỏ hàm
#!/bin/sh# Define your function hereHello () echo "Hello World $1 $2 $3" return 10# Invoke your functionHello Nguyễn ráng Thạo# Capture value returnd by last commandret=$?echo "Return value is $ret"Kết quả:
$./test.shHello World Nguyễn thay ThạoReturn value is 10
Một số ví dụ
Chạy thử một số script vô ích này mang đến vui chúng ta nhé
#!/bin/shfor i in 1..9; vì for j in $(seq 1 $i); vày echo -ne $i×$j=$((i*j))\t;done; echo;done#!/bin/bashstr=" 0 1 2 3 45 6 7 8 9 q w e r t y u o pa sd fgh jk lizxcvbnmQ WER TY U O p. A S D FG HJ KLZX CV B NM"color<0>="E<30;40m"color<1>="E<31;40m"color<2>="E<34;40m"color<3>="E<37;40m"clearecho "hacking $1"sleep 2echo "Initializing"sleep 2echo "Server hacking module is loading"sleep 2echo "Server hacking module is ready"sleep 2echo "Hack module is starting in 5 seconds"sleep 1echo "4 seconds"sleep 1echo "3 seconds"sleep 1echo "2 seconds"sleep 1echo "1 seconds"sleep 1ping -c 3 $1sleep 2netstatsleep 1findsmbsleep 1for i in 1..10000do number1=$RANDOM let "number1 %= $#str"number2=$RANDOMlet "number2 %=4"echo -n -e " 33<1m$color<$number2>$str:number1:1 33<0m"donesleep 3echo "$1 succesfully hacked!"sleep 1echo "PASSWORD ACCPTED: token is 453572345763425834756376534"#!/bin/bash#disables control ctrap "" 2# disables control ztrap "" SIGTSTPcolor="E<30;40m"clearecho "Formating disk(s): " /dev/sd*sleep 2echo "Initializing..."sleep 2echo -ne "Are you sure you want khổng lồ format these disks?(y/n): "sleep 1echo "Y"sleep 1echo "formating starts in 5 seconds"sleep 1echo "4 seconds"sleep 1echo "3 seconds"sleep 1echo "2 seconds"sleep 1echo "1 second"sleep 1for i in 1..50000doecho -n -e " 33<1m$color0 33<0m"donesleep 1echo ""echo /dev/sd* "are formatted."sleep 1echo "be sure to make sure you reboot khổng lồ clear operating system from RAM"