Showing posts with label Shell. Show all posts

Whiptail - Công cụ tạo giao diện đồ họa trên terminal (bash shell)

Công cụ này được dùng để tạo ra một giao diện đồ họa đơn giản để install hoặc settting một phần mềm nào đó trên môi trường bash shell của terminal.

Một ví dụ, chẳng hạn khi muốn config cấu hình của raspberry pi:
Gõ lệnh "sudo raspi-config" 

sẽ ra giao diện như dưới đây :


Note: Chi tiết cách sử dụng có thể tham khảo wiki





Tuesday, December 31, 2019

Arithmetic Expansion


Gán kết quả của một phép toán cho biến, có hai cách thực hiện:
 var=`expr statement`  
 var=$((statement))  

Ex:
 #!/bin/sh  
   
 x=10  
   
 val=`expr $x + 2`  
 echo "Total value : $val"  
   
 val2=$(( $x + 5))  
 echo "Total value : $val2"  

 $ ./test.sh  
 Total value : 12  
 Total value : 15  
   

Monday, July 13, 2015
Tag :

Command Execution


Có hai cách để thực hiện command execution trong shell:
Syntax:
 `command`  
   
 or  
 $(command)  

Ex:
 #!/bin/sh  
 echo The current directory is `pwd`  
 echo The current users are $(who)  
 exit 0  

Shell - Command build-in the shell


Shell cung cấp sẵn rất nhiều command hữu ích, dưới đây sẽ liệt kê một số cmd hay dùng.

1. set /unset
Lệnh set truyền giá trị cho các special variables (parameter variables) từ $1, $2, ...
Lệnh unset sẽ remove một biến khỏi môi trường shell.

Ex:
set
 $ set foo bar  
 $ echo $1  
 foo  
 $ echo $2  
 bar  
 $ echo $*  
 foo bar  
   

unset
 #!/bin/sh  
 foo="Hello World"   
 echo $foo  
 unset foo  
 echo $foo  

2. eval
Lệnh eval cho phép lấy được giá trị cuối cùng của một biến trong trường hợp biến đó được gán theo kiểu bắc cầu.

Ex:
 #!/bin/sh  
   
 foo=10  
 x=foo  
 y='$'$x
 eval z='$'$x
 echo $y  
 echo $z

 $./test.sh  
 $foo       # y value
 10         # z value

3. exec
Lệnh exec có hai cách dùng:
+ Thay thế shell hiện tai bằng một chương trình khác
Ex:
 $ exec wall "Thanks for all the fish"  
Shell hiện tại sẽ kết thúc và thay thế bằng chương trình wall.

+ Chỉnh sửa file descriptor hiện tại, trường hợp này ít được dùng
Ex:
 exec 3< afile  
File descriptor 3 sẽ được mở để đọc dữ liệu từ afile.

4. exit n
Trả về mã code của một chương trình shell khi nó kết thúc.

Exit Code Description
126 The file was not executable
127 A command was not found
128 and above A signal occurred

Giá trị exit 0 thường được dùng để biểu diễn cho việc trả về mã code thành công, và exit 1 là có lỗi xảy ra.

Ex:
 #!/bin/sh  
 if [ -f .profile ]; then  
 exit 0  
 fi  
 exit 1  

5. export
Lệnh export dùng để tạo ta một biến môi trường - environment variables, nhờ đó biến đó có thể được truy cập từ một chương trình hoặc shell script khác.

Ex:
 #!/bin/sh  
 echo $MYNAME  
 echo $YOURNAME  

 $MYNAME=Obama  
 $YOURNAME=Putin  
 $./test.sh  
   
 Putin

6. expr
expr được dùng trong việc mở rộng các phép toán số học trong shell. Xem lại Arithmetic Expansion.

7. printf
Hiển thị thông tin ra màn hình.
 printf "format string" parameter1 parameter2 ...  
format string rất đơn giản, nó tương tự như trong C/C++, chỉ có một điểm khác đó là không print được số float bởi vì các phép toán trong shell chỉ thực hiện với số int.


Escape Sequence Description
\" Double quote
\\ Backslash character
\a Alert (ring the bell or beep)
\b Backspace character
\c Suppress further output
\f Form feed character
\n Newline character
\r Carriage return
\t Tab character
\v Vertical tab character
\ooo The single character with octal value ooo
\xHH The single character with the hexadecimal value HH


Conversion Specifier Description
D Output a decimal number.
C Output a character.
S Output a string.
% Output the % character.

Ex:
 $ printf "%s\n" hello  
 hello  
 $ printf "%s %d\t%s" "Hi There" 15 people  
 Hi There 15  
 people  

8. return
return dùng khi muốn trở về từ một function, thường là return n, với n là mã code trả về.

9. shift
Lệnh shift dịch chuyển giá trị của các parameter variables trong lần lượt sang trái.

Ex:
 #!/bin/sh  
   
 echo "===== before shift ======"  
 echo "\$1=$1"  
 echo "\$2=$2"  
 echo "\$3=$3"  
   
 echo "===== affter shift ======"  
 shift  
 echo "\$1=$1"  
 echo "\$2=$2"  
 echo "\$3=$3"  
   

 $ ./helloworld.sh foo bar zar  
 ===== before shift ======  
 $1=foo  
 $2=bar  
 $3=zar  
 ===== affter shift ======  
 $1=bar  
 $2=zar  
 $3=  
   

10. find
Tìm kiếm trong thư mục.

Ex: Tìm kiếm file trong thư mục
Syntax:
find <dir> -name <filename>

11. grep
Tìm kiếm một mẫu.

Ex: Tìm kiếm device file mà tên của nó có chuỗi ký tự fb.
 $ ls /dev/ | grep "fb"  
 fb0  
   

12. man
Show ra documents của một command.
Syntax:
 $ man <command name)   

Ex: Document của lệnh ls.
 $ man ls  


Sunday, July 12, 2015
Tag :

Shell - Lists



1. The AND List
AND list cho phép bạn thực hiện một chuỗi liên tục các câu lệnh, muốn lệnh tiếp theo được chạy thì tất cả các lệnh trước đó phải thực hiện thành công.

Syntax:
 statement1 && statement2 && statement3 && ...  

Ex:
 #!/bin/sh  
 touch file_one  
 rm -f file_two  
 if [ -f file_one ] && echo "hello" && [ -f file_two ] && echo " there"  
 then  
 echo "in if"  
 else  
 echo "in else"  
 fi  
 exit 0  

 $./test.sh  
 hello  
 in else  

2. The OR List
OR list cho phép bạn thực hiện một chuỗi các câu lệnh cho đến khi nào có một câu lệnh thực hiện thành công, khi đó sẽ dừng lại, không thực hiện thêm bất cứ câu lệnh nào nữa.

Syntax:
 statement1 || statement2 || statement3 || ...  

Ex:
 #!/bin/sh  
 rm -f file_one  
 if [ -f file_one ] || echo "hello" || echo " there"  
 then  
   echo "in if"  
 else  
   echo "in else"  
 fi  
 exit 0  

 $./test.sh  
 hello  
 in if  


Shell - IO Redirections and Pipes


Theo mặc định của shell, khi thực hiện một command thì nó sẽ lấy dữ liệu đầu vào (nếu có) từ standard input (stdin) và xuất kết quả ra standard output (stdout). Tuy nhiên shell cũng cung cấp cú pháp để có thể thay thế stdin và stdout bằng đối tượng khác đó chính là file.


1. Output Redirection
Syntax:
 $ command > filename   
Xuất kết quả và ghi vào filename (nếu filename chưa có thì tạo mới)

 $ command >> filename  
Tương tự như trên, nhưng ghi tiếp (append) vào filename nếu filename đã tồn tại và có nội dung khác trước đó.

Ex:
 [ninhld@localhost ex]$ date > time.txt  
 [ninhld@localhost ex]$ cat time.txt   
 Sun Jul 12 21:46:04 ICT 2015  
 [ninhld@localhost ex]$   
 [ninhld@localhost ex]$   
 [ninhld@localhost ex]$ uptime >> time.txt   
 [ninhld@localhost ex]$ cat time.txt   
 Sun Jul 12 21:46:04 ICT 2015  
 21:46:24 up 3:03, 3 users, load average: 0.38, 0.56, 0.64  
   

2. Input Redirection
Syntax:
 $ command < filename   
Ngược lại với Output Redirection.

Ex:
 [ninhld@localhost ex]$ more < time.txt   
 Sun Jul 12 21:46:04 ICT 2015  
 21:46:24 up 3:03, 3 users, load average: 0.38, 0.56, 0.64  

3. Discard the output
Khi không muốn xuất kết quả hoặc các thông báo lỗi ra màn hình, shell cung cấp cú pháp để loại bỏ các kết quả và thông báo lỗi như sau.

Syntax:
 $ command > /dev/null         #Discard stdout   
 $ command > /dev/null 2>&1    #Discard stdout and stderr  
Trong đó /dev/null là một device file đặc biệt, tất cả các luồng dữ liệu đi vào nó đều được loại bỏ.

Ex:
 $ date > /dev/null  
 $ date > /dev/null 2>&1  
Bạn sẽ không có gì được print trên terminal.

4. Redirection Commands
Bảng dưới đây liệt kê tất cả các cú pháp redirection commands, bao gồm các cúa pháp đã liệt kê ở các mục trên.


Command Description
pgm > file Output of pgm is redirected to file
pgm < file Program pgm reads its input from file.
pgm >> file Output of pgm is appended to file.
n > file Output from stream with descriptor n redirected to file.
n >> file Output from stream with descriptor n appended to file.
n >& m Merge output from stream n with stream m.
n <& m Merge input from stream n with stream m.
<< tag Standard input comes from here through next tag at start of line.
| Takes output from one program, or process, and sends it to another.

5. Pipes
Pipes là đường ống dùng để truyền kết quả từ đầu ra của một lệnh vào đầu vào của một lệnh khác được thực hiện sau. Ký hiệu của pipe là dấu gạch đứng.

Ex:
 $ ls /dev | grep "fb"  
 fb0  

Lệnh ls /dev liệt kê ra danh sách tất cả các device file nằm trong thư mục /dev, kết quả này lại là đầu vào của lệnh grep (lệnh tìm kiếm theo mẫu) thông qua pipe, kết quả của chuỗi lệnh trên là lọc ra được "fb0" tương ứng với /dev/fb0.


Shell - Quoting Mechanisms



1. Cặp dấu nháy đơn
Chuỗi ký tự nằm giữa hai dấu nháy đơn sẽ được hiểu theo đúng nghĩa "đen" của nó, ký tự $ bị vô hiệu hóa, tất cả mọi thứ trong cặp dấu nháy đơn sẽ được giữ y nguyên khi echo ra.

Ex:
 [ninhld@localhost ex]$ NAME=obama  
 [ninhld@localhost ex]$ echo $NAME  
 obama  
 [ninhld@localhost ex]$ echo '$NAME'  
 $NAME  

2. Cặp dấu nháy kép
Cách sử dụng của dấu nháy kép cũng giống như dấu nháy đơn ngoại trừ một điểm là dấu nháy kép không thoát khỏi ý nghĩa đặc biệt của ký tự $. Điều đó có nghĩa là ta có thể đưa giá trị một biến vào trong một chuỗi.

Ex:
 [ninhld@localhost ex]$ NAME=obama  
 [ninhld@localhost ex]$ echo "Barack $NAME"  
 Barack obama  
   

3. Ký tự chéo ngược
Ký tự chéo ngược (backslash) đi trước một ký tự đặc biệt sẽ làm thoát khỏi ý nghĩa đặc biệt của ký tự đó.

Ex:
 [ninhld@localhost ex]$ NAME=obama  
 [ninhld@localhost ex]$ echo "Barack \$NAME"  
 Barack $NAME  

4. Ký tự nháy ngược
Ký tự nháy ngược hay dấu huyền ( ` command`) là một ký tự đặc biệt trong shell. Chuỗi ký tự nằm giữa hai dấu nháy ngược sẽ được xem là một câu lệnh, được thực hiện và giá trị trả về sẽ được lưu vào biến.

Ex:
 [ninhld@localhost ex]$ DATE=`date`  
 [ninhld@localhost ex]$ echo $DATE  
 Sun Jul 12 16:47:04 ICT 2015  
   


- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -