Trong windows chúng ta có batch file, trong linux có Shell Script. Nói chung shell là chương trình có thể tương tác người dùng, có thể input dữ liệu, có thể output ra màn hình, có thể tự động thực thi một nhóm lệnh do chúng ta tạo ra theo một lịch trình đã thiết lập.
1. Cách tạo và thực thi một chương trình shell
- Tạo file hello.sh với nội dung:
#!/bin/bash
echo "hello world"
Giải thích:
- #!/bin/bash: là shellbang, là dòng bắt buộc trong shell script
- echo "hello world": Khi chạy file hello.sh nó sẽ xuất ra
màn hình chữ "hello world"
- Thiết lập user có quyền (x) được phép thực thi cho file hello.sh
chmod u+x hello.sh
- Chạy chương trình - file hello.sh vừa tạo
Có thể thực hiện 1 trong 3 cách như dưới
- sh hello.sh- bash hello.sh- ./hello.sh
Ví dụ:
khanhvc@ubutu:~/projects/shell$ sh hello.sh
hello world
2. Shell variables
2.1 Biến của hệ thống: dùng lệnh printenv để in ra các biến đang tồn tại trong hệ thống linux
khanhvc@ubutu:~/projects/shell$ printenvSHELL=/bin/bashLC_ADDRESS=vi_VNLC_NAME=vi_VNLC_MONETARY=vi_VNPWD=/home/khanhvc/projects/shellLOGNAME=khanhvcXDG_SESSION_TYPE=ttyMOTD_SHOWN=pamHOME=/home/khanhvcLC_PAPER=vi_VNLANG=en_US.UTF-8LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:SSH_CONNECTION=192.168.0.48 63977 192.168.0.73 22LESSCLOSE=/usr/bin/lesspipe %s %sXDG_SESSION_CLASS=userLC_IDENTIFICATION=vi_VNTERM=xtermLESSOPEN=| /usr/bin/lesspipe %sUSER=khanhvcSHLVL=1LC_TELEPHONE=vi_VNLC_MEASUREMENT=vi_VNXDG_SESSION_ID=330XDG_RUNTIME_DIR=/run/user/1000SSH_CLIENT=192.168.0.48 63977 22LC_TIME=vi_VNXDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktopPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binDBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/busSSH_TTY=/dev/pts/0LC_NUMERIC=vi_VNOLDPWD=/home/khanhvc/projects_=/usr/bin/printenvkhanhvc@ubutu:~/projects/shell$
Ví dụ: Tạo file demo.sh để in các thông tin các biến theo yêu cầu dưới:
- Thông tin version của shell hiện tại
- Tên của shell
- Thư mục gốc của user hiện tại
- Thông tin đường dẫn đã được thiết lập
#!/bin/bashecho $BASH_VERSIONecho $BASHecho $HOMEecho $PATH
Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh5.0.17(1)-release/bin/bash/home/khanhvc/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binkhanhvc@ubutu:~/projects/shell$
2.2 Biến do người dùng định nghĩa UDV - User Defined variables, biến CÓ phân biệt chữ hoa, chữ thường
- Cú pháp:
ten_bien=gia_tri
- Ví dụ:
#!/bin/basha=6b=3expr $a + $b
Kết quả là: 9, vì nó lấy giá trị của a cộng cho giá trị của b
- Ví dụ khác:
#!/usr/bin/basha=6b=3tong=$(expr $a + $b)echo "Ket qua cua a CONG b = " $tonghieu=$(expr $a - $b)echo "Ket qua cua a TRU b = " $hieuthuong=$(expr $a / $b)echo "Ket qua cua a CHIA b = " $thuong#phép nhân chúng ta phải thêm dấu "\" trước dấu "*" để thực hiện phép nhântich=$(expr $a \* $b)echo "Ket qua cua a NHAN b = " $tich
Kết quả:
khanhvc@ubutu:~/projects/shell$ sh demo.shKet qua cua a CONG b = 9Ket qua cua a TRU b = 3Ket qua cua a CHIA b = 2Ket qua cua a NHAN b = 18khanhvc@ubutu:~/projects/shell$
2.2.2 LET
- Ví dụ
#!/usr/bin/basha=6let a+=1echo "a = 6, a + 1 = " ${a}let b=a+1echo "b = a + 1 = " $blet c=a+becho "c = a + b = " $c
- Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sha = 6, a + 1 = 7b = a + 1 = 8c = a + b = 15khanhvc@ubutu:~/projects/shell$
2.2.3 “bc” – An arbitrary precision calculator language”
- Ví dụ:
#!/usr/bin/bash#in ra kết quả của 5 + 3echo "5 + 3" | bc#in ra kết quả là giá trị của x + yx=10y=20echo "$x + $y" | bc#in ra kết quả là giá trị của x + ybc <<< "$x + $y"
- Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh83030khanhvc@ubutu:~/projects/shell$
Xong!
No comments:
Post a Comment