Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Thành Thạo Biến Bash: 6 Ví Dụ Thực Tế Về Biến Toàn Cục & Cục Bộ

Thành Thạo Biến Bash: 6 Ví Dụ Thực Tế Về Biến Toàn Cục & Cục BộBài viết này là một phần của loạt bài hướng dẫn bash đang diễn ra. Giống như bất kỳ ngôn ngữ lập trình nào khác, Bash cũng cung cấp biến.

Biến Bash cung cấp bộ nhớ tạm thời cho thông tin sẽ cần trong vòng đời của chương trình.

Cú pháp:

VARNAME=VALUE

Lưu ý: Không nên có khoảng trắng quanh dấu = khi gán biến. Khi bạn dùng VAR=VALUE, shell thấy = như một ký hiệu và coi lệnh như gán biến. Khi bạn dùng VAR = VALUE, shell giả định VAR phải là tên một lệnh và cố gắng thực thi nó.

Shell không quan tâm kiểu biến. Biến có thể lưu chuỗi, số nguyên, hoặc số thực.

Ví Dụ 1. Gán Biến Bash Đơn Giản

Script sau tạo biến tên LIST và gán giá trị "/var/opt/bin". Để truy cập biến, chỉ cần thêm $ trước tên biến, nó sẽ cho giá trị lưu trong biến đó.

$ cat sample.sh
#!/bin/bash
LIST="/var/opt/bin/"
ls -l $LIST

Thực thi script trên, nó sẽ liệt kê /var/opt/bin ở định dạng dài như dưới đây.

$ ./sample.sh
total 8
drwxrwsr-x 2 bin bin 4096 Jan 29 06:43 softwares
drwxr-sr-x 5 root bin 4096 Sep 2 2009 llist

Phạm Vi Biến Bash – Toàn Cục và Cục Bộ

Trong Bash, biến không cần khai báo. Nhưng, khi bạn truy cập biến chưa dùng bao giờ, bạn sẽ không nhận cảnh báo hay lỗi. Thay vào đó, nó hiển thị giá trị rỗng.

Ví Dụ 2. Giá Trị Rỗng Trong Biến Bash

$ cat var1.sh
#!/bin/sh
echo "Variable value is: $VAR1"
VAR1="GEEKSTUFF"
echo "Variable value is: $VAR1"
$ ./var1.sh
Variable value is:
Variable value is: GEEKSTUFF

Như trên, ban đầu biến có giá trị rỗng, sau khi gán, bạn lấy được giá trị. Lệnh export dùng để xuất biến từ shell tương tác. Export thể hiện tác động lên phạm vi biến.

Ví Dụ 3. Biến Bash Không Có Export

Gán biến với giá trị trong shell tương tác, và thử truy cập cùng trong script shell.

$ VAR2=LINUX
$ cat var2.sh
#!/bin/bash
echo "VAR2=$VAR2"
VAR2=UNIX
echo "VAR2=$VAR2"

Bây giờ, thực thi script trên như dưới đây.

$ ./var2.sh
VAR2=
VAR2=UNIX

Vẫn nhận giá trị rỗng cho biến VAR2. Shell lưu biến VAR2 với LINUX chỉ trong shell hiện tại. Khi thực thi var2.sh, nó sinh ra shell và thực thi script. Vì vậy biến VAR2 không có giá trị trong shell con. Bạn cần export biến để nó được kế thừa bởi chương trình khác – bao gồm script shell, như dưới đây.

Ví Dụ 4. Xuất Biến Bash (Export)

$ export VAR2=LINUX
$ cat var2.sh
#!/bin/bash
echo "VAR2=$VAR2"
VAR2=UNIX
echo "VAR2=$VAR2"

Bây giờ thực thi script trên.

$ ./var2.sh
VAR2=LINUX
VAR2=UNIX
$ $echo $VAR2
LINUX

Bây giờ, bạn nhận thấy sau khi thực thi script shell var2.sh, giá trị VAR2 là LINUX. Bởi vì biến không được truyền ngược về shell tương tác của bạn, trừ khi bạn thực thi script trong shell hiện tại.

Khai Báo Biến Bash

Sử dụng câu lệnh declare trong bash, chúng ta có thể giới hạn giá trị gán cho biến. Nó hạn chế thuộc tính của biến. Tùy chọn trong câu lệnh declare dùng để xác định kiểu biến.

Cú pháp:

declare option variablename
  • declare là từ khóa
  • tùy chọn có thể:
    • -r biến chỉ đọc
    • -i biến số nguyên
    • -a biến mảng
    • -f cho hàm
    • -x khai báo và export cho các lệnh tiếp theo qua môi trường.

Ví Dụ 5. Khai Báo Biến Bash Sử Dụng Declare

$ cat declar.sh
#!/bin/bash
declare -i intvar
intvar=123  # Gán giá trị số nguyên.
echo $intvar
intvar=12.3 # Thử lưu kiểu chuỗi vào biến số nguyên
echo $intvar
declare -r rovar=281
rovar=212  # Thử thay đổi biến chỉ đọc.

Từ thực thi dưới, bạn nhận thấy thông báo lỗi khi gán dữ liệu không hợp lệ cho biến.

$ ./declar.sh
123
t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3")
123
t.sh: line 11: rovar: readonly variable

Biến Toàn Cục Bash

Biến toàn cục còn gọi là biến môi trường, sẽ có sẵn cho tất cả shell. Lệnh printenv dùng để hiển thị tất cả biến môi trường.

$ printenv
SHELL=/bin/bash
HISTSIZE=1000
SSH_TTY=/dev/pts/1
HOME=/root
LOGNAME=root
CVS_RSH=ssh

Biến Cục Bộ Bash

Biến cục bộ chỉ nhìn thấy trong khối mã. local là từ khóa dùng để khai báo biến cục bộ. Trong một hàm, biến cục bộ chỉ có ý nghĩa trong khối hàm đó.

Ví Dụ 6. Biến Toàn Cục và Cục Bộ Bash

$ cat localvar.sh
#!/bin/bash
pprint() {
  local lvar="Local content"
  echo -e "Local variable value with in the function"
  echo $lvar
  gvar="Global content changed"
  echo -e "Global variable value with in the function"
  echo $gvar
}
gvar="Global content"
echo -e "Global variable value before calling function"
echo $gvar
echo -e "Local variable value before calling function"
echo $lvar
pprint
echo -e "Global variable value after calling function"
echo $gvar
echo -e "Local variable value after calling function"
echo $lvar

Thực thi script trên,

$ sh t.sh
Global variable value before calling function
Global content
Local variable value before calling function

Local variable value with in the function
Local content
Global variable value with in the function
Global content changed
Global variable value after calling function
Global content changed
Local variable value after calling function

Trong đầu ra trên, biến cục bộ chỉ có giá trị rỗng trước và sau khi gọi hàm. Phạm vi chỉ trong hàm. Nó biến mất ngoài hàm, trong khi biến toàn cục có giá trị cập nhật ngay cả sau khi thực thi hàm.