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
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
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
Tag :
Shell
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.
Tag :
Shell
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
Tag :
Shell


