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 $THAO

Biế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

thao
bla-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ụthao
bla-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_namehoặc toàn bộ giá trị trong mảng:

$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 tínhÝ nghĩaVí dụ
+Phép cộngexpr $a + $b trả kết quả 30
-Phép trừexpr $a - $b trả hiệu quả -10
*Phép nhânexpr $a * $b trả hiệu quả 200
/Phép chiaexpr $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:

Phép tínhÝ nghĩaVí dụ
-eqKiể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
-neKiể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
-gtKiể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
-ltKiể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
-geKiể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
-leKiể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é
*
(nhắc lại là vô dụng, chỉ để cho vui thôi 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:133<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$color033<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"

Kết luận