Đặt lệnh chạy linux shell

Mặc dù chúng ta đã quá quen với shell script. Nhưng sau đây, tôi vẫn muốn giới thiệu về cách để viết 1 shell script cho những bạn đang cần nó.

1. Viết shell script như thế nào ?

Bước 1: dùng bất cứ chương trình gì có thể soạn thảo . Ví dụ: vi

  • Bạn nên dùng gedit để viết shell vì khi viết shell nó sẽ hiện màu sắc phân biệt giữa các kí tự và các từ khoá giúp bạn dễ kiểm soát lỗi. Bước 2: sau khi viết xong phải gán quyền thực thi cho script Ví dụ: $ chmod u+x tên script Bước 3: thực thi script Cú pháp:
$ bash tên_script
$ sh tên_script
$ ./ tên_script

Cấu trúc một chương trình shell script như sau:

#!/bin/bash  không in được hôm nay là thứ mấy
echo "hôm nay là `date`" -> sẽ in ra ngày tháng hôm nay vì date nằm trong dấu nháy ngược ` `

7. Trạng thái Exit

Mặc định trong Linux, khi một lệnh hoặc script thực thi , nó trả về 2 loạI giá trị để xác định xem lệnh hoặc script đó có thực thi thành công không. [1]. Nếu giá trị trả về là 0 [zero] -> lệnh thực thi thành công [2]. Nếu giá trị trả về khác 0 [nonzero] -> không thành công Giá trị đó gọI là Exit status Vậy làm thế nào để biết được giá trị trả về của một lệnh hay 1 script ? Rất đơn giản, chỉ cần sử dụng biến đặc biệt có sẵn của shell: $? Ví dụ: nếu bạn xoá 1 file không tồn tạI trên đĩa cứng

rm unknowfile
echo $? -> sẽ in ra màn hình một giá trị khác 0

8. Lệnh read – đọc giá trị nhập từ bàn phím , file …

Dùng để lấy dữ liệu nhập từ bàn phím và lưu vào biến Cú pháp: read var1 var2 var3 … varN read không có tham số  giá trị sẽ được chứa trong biến $REPLY ví dụ:

read
var="$REPLY"

Bình thường thì dấu \ cho phép xuống dòng để nhập tiếp dữ liệu trong read. Nếu read –rthì sẽ không có ý nghĩa đó. Ví dụ: read var # nhập vào: first line \ second line echo "$var"  kết quả: first line second line Nhưng vớI tham số r thì sao ? read –r var # nhập vào: first line \ echo "$var"  kết quả: first line \ Lệnh read có thể dùng để đọc file. Nếu file chứa nhiều hơn 1 dòng thì chỉ có dòng thứ nhất được gán cho biến . Nếu read vớI nhiều hơn 1 biến [read var1 var2 …] thì read sẽ dựa vào biến $IFS để gán dữ liệu cho các biến. Mặc định thì $IFS là khoảng trắng. Ví dụ: read var < data_file Nếu file có nhiều hơn 1 dòng read var1 var2 < data_file Khi đó, mỗI biến sẽ chứa 1 chuỗI được cách biệt bởI khoảng trắng [$IFS] chứ không phảI 1 dòng, biến cuốI cùng sẽ được chứa toàn bộ phần còn lạI của dòng. Vậy làm thế nào để đọc toàn bộ file ? Có thể giảI quyết bằng vòng lặp không ??

while read line
do
echo $line
done < data_file

Sử dụng $IFS [Internal File Separator ] để tách một dòng input của read, nếu bạn không muốn mặc định là khoảng trắng thì làm như thế nào ? Xem đoạn script sau:

echo "liet ke tat ca user "
OIFS=$IFS; IFS=: # backup lạI IFS và gán giá trị mới. Ví file /etc/passwd dùng: để tách biệt

các trường vớI nhau nên gán IFS là:

while read name passwd uid gid fullname ignore
do
echo "$name $fullname"
done < /etc/passwd # I/O redirection
IFS=$OIFS # trả lạI IFS ban đầu

Nếu đặt IFS ngay trong vòng lặp thì không cần backup IFS

while IFS=: read name passwd uid gid fullname ignore
do
echo "$name $fullname"
done < /etc/passwd

IFS vẫn không đổi

9. Tham số lệnh

Giả sử ta có script tên myself , để thực thi script này ta cần truyền vào 2 tham số như sau: $ myself one two Trong đó myself là tên script one: tham số thứ nhất truyền vào script two: tham số thứ hai Trong shell, bạn truy xuất đến những tham số như sau: myself$0 one$1 two$2 Và biến $# [có sẵn trong shell] sẽ cho giá trị 2 [có 2 tham số onetwo]. Bạn có thể lấy tất cả các tham số bằng cách sử dụng biến $@ hoặc $*

10.Redirection

Hầu hết tất cả lệnh đều cho xuất kết quả ra màn hình hoặc lầy dữ liệu từ bàn phím nhưng vớI Linux bạn còn có thể xuất dữ liệu vào file và đọc dữ liệu từ file. Ví dụ: ls > filename # in kết quả lệnh ls vào file có tên filename. Có 3 ký hiệu redirection là >, >> cú pháp: linux-command > filename Xuất output của lệnh ra file. Nếu file tồn tạI thì nó sẽ ghi đè còn nếu file chưa có thì tạo file mớI [2]. Ký hiệu >> cú pháp: linux-command >> filename Xuất output của lệnh vào cuốI file nếu file đã tồn tạI, còn nếu file chưa tồn tạI thì tạo file mới. [3]. Ký hiệu

Bài Viết Liên Quan

Chủ Đề