2012-03-28 25 views
13

Tôi có thể tạo tập lệnh Bash có biến cố định không?Biến trong Tập lệnh Bash giữ giá trị từ lần chạy cuối cùng

Ví dụ: tôi khởi tạo biến bằng 0 khi tập lệnh chạy lần đầu tiên (trong một giới hạn thời gian cụ thể) và biến tăng tự động mỗi lần tập lệnh chạy.

+0

chìa khóa/giá trị ghi cơ sở dữ liệu trong kịch bản bash; https://github.com/damphat/kv-bash :) – damphat

Trả lời

14

bạn có thể không, nhưng bạn có thể sử dụng một tập tin để làm điều đó

#!/bin/sh 

# if we don't have a file, start at zero 
if [ ! -f "/tmp/value.dat" ] ; then 
    value=0 

# otherwise read the value from the file 
else 
    value=`cat /tmp/value.dat` 
fi 

# increment the value 
value=`expr ${value} + 1` 

# show it to the user 
echo "value: ${value}" 

# and save it for next time 
echo "${value}" > /tmp/value.dat 
3

Tôi e rằng bạn phải lưu trạng thái vào tệp ở đâu đó. Bí quyết là đặt nó ở đâu đó mà người dùng có thể ghi vào.

yourscriptvar=0 

if [ -e "$HOME/.yourscriptvar" ] ; then 
    yourscriptvar=$(cat "$HOME/.yourscriptvar") 
fi 

# do something in your script 

#save it output the file 
echo $yourscriptvar > "$HOME/.yourscriptvar" 
+1

Đây là bash-ism: 'yourscriptvar = $ (<" $ HOME/.yourscriptvar ")'. Tài liệu [ở đây] (http://www.gnu.org/software/bash/manual/bashref.html#Command-Substitution) –

+0

Tôi thích nó ... Tôi sẽ đặt nó trong túi của tôi về hack bash. cảm ơn –

3

tôi đã cùng một vấn đề một vài ngày trước đây và tôi đã viết công cụ của riêng tôi để làm công việc vì không có cách nào khác để làm điều tương tự.

gvar là cửa hàng khóa-giá trị thuần túy trong đó mỗi người dùng có một bộ sưu tập dữ liệu khác nhau. Các bản ghi được lưu trữ trong thư mục chính của người dùng.

Dưới đây là các chức năng thú vị nhất từ ​​mã nguồn:

get_variable() { 
    cat $FILE | grep -w $1 | cut -d'=' -f2 
} 

set_variable() { 
    echo $1=$2 >> $FILE 
} 

remove_variable() { 
    sed -i.bak "/^$1=/d" $FILE 
} 
+0

Huh. Bạn sẽ nghĩ rằng đối với 'thư viện' như vậy, nó sẽ được tối ưu hóa cho tốc độ. Ví dụ, 'cat' là không cần thiết nếu bạn sử dụng' grep' vì 'grep' có thể lấy một tệp làm đối số. Bên cạnh đó, tôi tự hỏi làm thế nào điều này sẽ làm việc tốt trong thực hiện song song nếu nó không sử dụng 'flock' hoặc một cái gì đó. – Yeti

+0

@Yeti bạn hoàn toàn đúng, gvar chỉ là một món đồ chơi giải quyết vấn đề của tôi nhưng tôi đã không đi tiếp. Tôi nghĩ những điều tương tự mà bạn đã chỉ ra. Cảm ơn. –

Các vấn đề liên quan