Một ít về shell script
Bài đăng này đã không được cập nhật trong 7 năm
Trong công việc đôi khi xử lý bằng shell script giúp ích cho bạn ít nhiều.
Bạn có thể xem qua link: https://www.shellscript.sh/
Đầu tiên để chạy ra một file shell script ta làm các bước sau:
Tạo ra một file
giả sử tên là my-script.sh
#!/bin/sh
echo Hello World
Sau đó chạy lệnh
chmod +x my-script.sh
Muốn chạy file này ta gọi
./my-script.sh
Sử dụng alias
khá đơn giản: bạn gán alias test_alias="ls"
, sau đó gõ test_alias
ngoài commander
lệnh được gán phía trên sẽ chạy.
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$ alias test_alias="ls"
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$ test_alias
123456789 backup.sh test.txt
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$
Muốn tạo 1 function
ta định nghĩa:
function hello_world
{
echo Hello World
}
Muốn lấy option
cùng lúc gọi file ta dùng getopts
(https://www.mkssoftware.com/docs/man1/getopts.1.asp)
Ta có thể viết:
while getopts "ad" opt; do
case $opt in
a ) echo "option is a" ;;
d ) echo "option is d" ;;
esac
done
Sau đó test thử:
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$ ./backup.sh -a
option is a
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$ ./backup.sh -d
option is d
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$
Việc viết Shell-Script
cũng không đến nỗi quá khó, thử sử dụng để viết một lênh riêng của bạn, ví dụ làm cho lệnh ls -l
show ra bảng chẳng hạn:
Đầu tiên ta lấy dữ liệu từ lệnh ls -l
bằng cách
OIFS=$IFS; IFS=$'\n'; list_files=($(ls -ls)); IFS=$OIFS;
FILE_COUNTER="${#list_files[@]}"
Thêm các function
header
, body
, footer
function header
{
echo "---------------------------------------------------------------------------------------"
echo " Dir User Size Created at File name"
echo "---------------------------------------------------------------------------------------"
}
function body
{
index=1
while [ $index -lt $FILE_COUNTER ]
do
echo "${list_files[$index]}"
index=`expr $index + 1`
done
}
function footer
{
total_file_counter=`expr $FILE_COUNTER - 1`
echo "---------------------------------------------------------------------------------------"
echo "Total: $total_file_counter files"
}
Cuối cùng là gọi các function
đã được định nghĩa ở trên ra:
header
body
footer
Ta thử chạy file
list_file.sh
trên command:
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$ ./list_file.sh
---------------------------------------------------------------------------------------
Dir User Size Created at File name
---------------------------------------------------------------------------------------
4 -rw-r--r-- 1 FRAMGIA\pham.huy.cuong FRAMGIA\domain^users 10 Th06 15 11:39 123456789
4 -rwxrw-rw- 1 FRAMGIA\pham.huy.cuong FRAMGIA\domain^users 1203 Th06 22 08:24 backup.sh
4 -rw-rw-rw- 1 FRAMGIA\pham.huy.cuong FRAMGIA\domain^users 10 Th06 15 11:39 test.txt
---------------------------------------------------------------------------------------
Total: 3 files
FRAMGIA\pham.huy.cuong@pham:~/ll/shell-script$
Chỉ là một ứng dụng nho nhỏ để làm cho việc show
file list
theo ý thích của bạn, cảm ơn và hi vọng bài viết giúp ích trong công việc của bạn
All rights reserved
Bình luận
@pham.huy.cuong Em đang tìm hiểu vagrant, cụ thể là Homestead (laravel) thì thấy rằng người ta sử dụng shell scripts cho việt chạy các cài đặt hoặc thiết lập cho máy ảo. Em có tìm kiếm trên google nhưng cảm thấy chưa link nào phù hợp lắm. Theo em hiểu thì shell scripts này chỉ dùng được cho mac(unix) hoặc ubutu phải không anh? Ngoài ra anh có thể gợi ý thêm cho em một vài trang để học shell scripts languages được không ạ? Em cảm ơn.
@quynh001 Shell script thường thì người chỉ nói đến script cho các loại shell trên Unix hoặc Linux (sh, bash, v.v...). Các hệ điều hành Unix, Linux thì các shell đã được tích hợp sẵn, tuy nhiên Windows vẫn có thể sử dụng được nếu bạn cài đặt thêm. Nhưng để lập trình thì mình nghĩ nên sử dụng Linux (Ubuntu là một lựa chọn tốt) vì việc cài đặt các thư viện hay package sẽ dễ dàng hơn. Để học shell script thì bạn có thể bắt đầu làm quen với trang này, hoặc có thể tham khảo thêm trang này để biết rõ thêm về nhiều lệnh.
Em cảm ơn anh. Bài viết của anh rất thú vị, mong anh sẽ tiếp tục có những bài viết thú vị khác.