Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Hướng dẫn về biến Bash - 6 Ví dụ về biến cục bộ và toàn cục thực tế về Bash

Hướng dẫn về biến Bash - 6 Ví dụ về biến cục bộ và toàn cục thực tế về Bash Bài viết này là một phần của loạt bài hướng dẫn bash đang thực hiện của chúng tôi. Giống như bất kỳ ngôn ngữ lập trình nào khác, Bash cũng cung cấp các biến.

Biến bash cung cấp khả năng lưu trữ tạm thời cho thông tin cần thiết trong suốt thời gian tồn tại của chương trình.

Cú pháp:

VARNAME=VALUE

Lưu ý: Không được có bất kỳ khoảng trống nào xung quanh dấu “=” trong phép gán biến. Khi bạn sử dụng VAR =VALUE, shell sẽ coi “=” là một ký hiệu và coi lệnh như một phép gán biến. Khi bạn sử dụng VAR =VALUE, shell giả định rằng VAR phải là tên của một lệnh và cố gắng thực thi nó.

Shell không quan tâm đến kiểu của các biến. Các biến có thể lưu trữ chuỗi, số nguyên hoặc số thực.

Ví dụ 1 Sử dụng Chỉ định Biến Bash Đơn giản

Tập lệnh sau tạo một biến có tên LIST và gán giá trị “/ var / opt / bin”. Để truy cập các biến, chỉ cần thêm $ vào trước tên biến, điều này sẽ cung cấp cho bạn giá trị được lưu trữ trong biến đó.

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

Thực thi tập lệnh trên, tập lệnh này sẽ liệt kê / var / opt / bin ở định dạng dài như được hiển thị bên dưới.

$ ./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 - Cục bộ và toàn cầu

Trong Bash, các biến không cần phải được khai báo. Tuy nhiên, khi bạn truy cập vào biến không được sử dụng cho đến nay, bạn sẽ không nhận được bất kỳ cảnh báo hoặc thông báo lỗi nào. Thay vào đó, nó sẽ hiển thị một giá trị trống.

Ví dụ 2. Giá trị trống trong biến cơ sở

$ 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ư hình trên, ban đầu biến sẽ có giá trị trống, sau khi gán, bạn có thể lấy các giá trị của mình. lệnh export được sử dụng để xuất một biến từ một shell tương tác. xuất cho thấy ảnh hưởng đến phạm vi của các biến.

Ví dụ 3. Biến Bash không có xuất

Gán một biến với một giá trị trong một trình bao tương tác và cố gắng truy cập vào cùng một giá trị trong tập lệnh trình bao của bạn.

$ VAR2=LINUX

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

Bây giờ, hãy thực thi tập lệnh trên như được hiển thị bên dưới.

$ ./var2.sh
VAR2=
VAR2=UNIX

Tuy nhiên, bạn sẽ nhận được giá trị trống cho biến VAR2. Trình bao lưu trữ biến VAR2 với LINUX chỉ trong trình bao hiện tại. Trong quá trình thực thi var2.sh, nó sinh ra shell và nó thực thi script. Vì vậy, biến VAR2 sẽ không có giá trị trong shell được tạo. Bạn cần xuất biến để nó được kế thừa bởi một chương trình khác - bao gồm một tập lệnh shell, như được hiển thị bên dưới.

Ví dụ 4. Xuất biến Bash

$ export VAR2=LINUX

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

Bây giờ hãy thực thi tập lệnh trên.

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

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

Khai báo biến Bash

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

Cú pháp:

declare option variablename
  • khai báo là một từ khoá
  • tuỳ chọn có thể là:
    • -r biến chỉ đọc
    • -i biến số nguyên
    • -một biến mảng
    • -f cho các trò chơi nhỏ nhất
    • -x khai báo và xuất sang các lệnh tiếp theo thông qua môi trường.

Ví dụ 5. Khai báo biến Bash bằng khai báo

$ cat declar.sh
#!/bin/bash
declare -i intvar
intvar=123 # Assigning integer value.
echo $intvar
intvar=12.3 #Trying to store string type value to an integer variable
echo $intvar

declare -r rovar=281
rovar=212 # Trying to change the readonly variable.

Từ thực thi bên dưới, bạn có thể nhận thấy thông báo lỗi khi bạn gán dữ liệu không hợp lệ cho một 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 số Bash toàn cục

Các biến toàn cục còn được gọi là biến môi trường, sẽ có sẵn cho tất cả các trình bao. Lệnh printenv được sử dụng để hiển thị tất cả cá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 số Bash cục bộ

Các biến cục bộ chỉ hiển thị trong khối mã. local là một từ khóa được sử dụng để khai báo các biến cục bộ. Trong một hàm, một biến cục bộ chỉ có ý nghĩa trong khối hàm đó.

Ví dụ 6. Biến số Bash toàn cục và cục bộ

$ 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 tập lệnh 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, các biến cục bộ sẽ chỉ có giá trị trống trước và sau khi gọi hàm. Phạm vi của nó chỉ với trong hàm. Nó đã biến mất khỏi hàm, trong khi biến toàn cục có giá trị được cập nhật ngay cả sau khi thực thi hàm.