- Back to Home »
- Shell »
- Shell - What Is a Shell
Saturday, July 11, 2015
Bài viết liên quan:
+ Linux Architecture
1. Shell
Shell là một chương trình thông dịch, có tác dụng dịch các user requests thành các chương trình thực thi dưới kernel và trả về kết quả cho user. Shell nhận requests từ stdin, xuất kết quả ra stdout và stderr, thể hiện qua màn hình terminal vì thế còn gọi là CLIs - Command Line Interfaces.
Shell bao gồm các câu lệnh được xây dựng sẵn, user có thể chạy lệnh trược tiếp trên Terminal (Shell prompt) hoặc thông qua các hàm gọi trong các chương trình Application. Trong Shell cũng được xây dựng một môi trường bao gồm các biến, cấu trúc điều kiện, điều khiển,... tương tự như ngôn ngữ lập trình bậc cao như C/C++, vì thế có thể viết một đoạn mã lệnh shell trong một script (shell script), công việc đó có thể gọi là Shell programming.
1.1 Shell prompt
[ninhld@localhost ~]$
[ninhld@localhost ~]$ date
Tue Jul 7 22:51:47 ICT 2015
[ninhld@localhost ~]$
[ninhld@localhost ~]$
[ninhld@localhost ~]$ ls -l
total 128
drwxrwxr-x. 5 ninhld ninhld 4096 Feb 19 00:29 carmeter
drwxr-xr-x. 2 ninhld ninhld 49152 Jun 7 21:33 Desktop
drwxr-xr-x. 10 ninhld ninhld 4096 Jul 5 17:26 Documents
drwxr-xr-x. 2 ninhld ninhld 4096 Jul 7 22:36 Downloads
drwx------. 14 ninhld ninhld 4096 Jul 7 20:45 Dropbox
drwxrwxr-x. 5 ninhld ninhld 4096 Mar 14 19:38 freescale
drwxrwxr-x. 7 ninhld ninhld 4096 Jun 28 21:49 Github
drwxrwxr-x. 3 ninhld ninhld 4096 Dec 10 2014 GoldenDict
drwxrwxrwx. 8 ninhld ninhld 4096 Jun 29 22:00 mini2440
drwxr-xr-x. 2 ninhld ninhld 4096 Jun 28 22:23 Music
drwxr-xr-x. 4 ninhld ninhld 16384 Jul 5 22:41 Pictures
drwxr-xr-x. 2 ninhld ninhld 4096 Dec 10 2014 Public
drwx------. 2 ninhld ninhld 4096 May 30 15:58 SkypeDownload
drwxr-xr-x. 2 ninhld ninhld 4096 Dec 10 2014 Templates
drwxr-xr-x. 3 ninhld ninhld 4096 Jul 7 22:29 Videos
drwxrwxr-x. 4 ninhld ninhld 4096 May 23 21:02 VirtualBox VMs
drwxrwxr-x. 5 ninhld ninhld 4096 May 24 10:51 workspace
[ninhld@localhost ~]$
[ninhld@localhost ~]$
[ninhld@localhost ~]$ uptime
22:51:58 up 2:08, 3 users, load average: 0.58, 0.54, 0.53
[ninhld@localhost ~]$
[ninhld@localhost ~]$
hoặc
[ninhld@localhost ex]$ for txt in hello everybody ^_^ #enter here
> do
> echo $txt
> done
hello
everybody
^_^
[ninhld@localhost ex]$
1.2 Shell script
helloworld.sh
#!/bin/sh
for txt in Hello everybody ^_^
do
echo $txt
done
exit 0
[ninhld@localhost ex]$ chmod 755 helloworld.sh
[ninhld@localhost ex]$ ./helloworld.sh
Hello
everybody
^_^
[ninhld@localhost ex]$
1.3 Shell comments
Khi dùng shell script cần có các ghi chú vì thế shell cung cấp ký tự # để dùng làm comments
#!/bin/bash
# Author : ninhld
# Copyright (c) eslinuxprogramming.blogspot.com
# Script follows here:
pwd
ls
2. Các loại Shell
Hiện có nhiều phiên bản shell chạy trên các bản phân phối khác nhau của Linux.
Tuy nhiên trong phạm vi của các bản phân phối Ubuntu / Fedora và Embedded Linux mà chúng ta đề cập trong blog này thì chỉ quan tâm đễn sh và bash mà thôi.
Khi viết một shell script thường sẽ đi kèm với một dấu hiệu nhận biết loại shell như dưới đây:
#!/bin/sh
hoặc
#!/bin/bash
Phần đuôi mở rộng của script được dùng là ".sh", xem lại ví dụ helloworld.sh ở trên.
3. Cách chạy chương trình Shell
Shell script có thuộc tính executeable tương tự nhu file nhị phân, vì thế để chạy chương trình shell cần thỏa mãn hai điều kiện:
+ Được cấp quyền "x" bằng các lệnh chmod, chown, chgrp (File Permissions)
+ Shell script được chạy bằng đường dẫn tuyệt đối hoặc qua biến môi trường PATH
[ninhld@localhost ex]$
[ninhld@localhost ex]$ chmod 755 helloworld.sh #cấp quyền executeable
[ninhld@localhost ex]$ ./helloworld.sh #execute bằng đường dẫn cụ thể
Hell
everybody
^_^
[ninhld@localhost ex]$
[ninhld@localhost ex]$
[ninhld@localhost ex]$ pwd
/home/ninhld/Github/eslinuxprogramming/Shell/ex
[ninhld@localhost ex]$
[ninhld@localhost ex]$ cd $HOME #chuyển thư mục
[ninhld@localhost ~]$
[ninhld@localhost ~]$ export PATH=$PATH:/home/ninhld/Github/eslinuxprogramming/Shell/ex
[ninhld@localhost ~]$
[ninhld@localhost ~]$
[ninhld@localhost ~]$
[ninhld@localhost ~]$ helloworld.sh #execute script thông qua biến môi trường PATH
Hello
everybody
^_^
[ninhld@localhost ~]$