回答編集履歴

2

スクリプト追加

2017/04/08 12:26

投稿

otn
otn

スコア84423

test CHANGED
@@ -25,3 +25,135 @@
25
25
  `declare -p Name Age > $DATA`
26
26
 
27
27
  これで、保存。
28
+
29
+
30
+
31
+ #追記
32
+
33
+ データ保存出来ない以外は大体出来ているのかと思っていたら、色々間違いがあるので、間違いを直しました。
34
+
35
+ エラーチェックなど全然無いのはそのままです。また、コマンドインジェクション脆弱性もあります。
36
+
37
+ ```Bash
38
+
39
+ #!/bin/bash
40
+
41
+ echo "Content-Type: text/plain"
42
+
43
+ echo ""
44
+
45
+
46
+
47
+ DATA=/tmp/hoge-hoge
48
+
49
+ if test -f $DATA
50
+
51
+ then source $DATA #データファイルが存在すれば実行する
52
+
53
+ else deleteall #データファイルが無ければ、初期化
54
+
55
+ fi
56
+
57
+
58
+
59
+ #データ追加
60
+
61
+ function add {
62
+
63
+ Name+=("$1")
64
+
65
+ Age+=("$2")
66
+
67
+ }
68
+
69
+
70
+
71
+ #データ初期化
72
+
73
+ function deleteall {
74
+
75
+ Name=()
76
+
77
+ Age=()
78
+
79
+ }
80
+
81
+
82
+
83
+ #データ検索
84
+
85
+ function check {
86
+
87
+ for ((i = 0; i < ${#Name[@]}; i++)) {
88
+
89
+ if test "${Name[$i]}" = "$1"
90
+
91
+ then
92
+
93
+ echo "${Name[i]} : ${Age[i]}"
94
+
95
+ fi
96
+
97
+ }
98
+
99
+ }
100
+
101
+
102
+
103
+ #URL引数を変数にセット
104
+
105
+ XIFS="$IFS"
106
+
107
+ IFS="&"
108
+
109
+ set -- $QUERY_STRING
110
+
111
+ IFS="$XIFS"
112
+
113
+
114
+
115
+ for arg
116
+
117
+ do case "$arg" in
118
+
119
+ function=*) function=${arg#function=} ;;
120
+
121
+ name=*) name=${arg#name=} ;;
122
+
123
+ age=*) age=${arg#age=} ;;
124
+
125
+ esac
126
+
127
+ done
128
+
129
+ echo "function: $function"
130
+
131
+ echo "name: $name"
132
+
133
+ echo "age: $age"
134
+
135
+
136
+
137
+ case "$function" in
138
+
139
+ "add")
140
+
141
+ add "$name" "$age" ;;
142
+
143
+ "deleteall")
144
+
145
+ deleteall;;
146
+
147
+ "check")
148
+
149
+ check "$name";;
150
+
151
+ esac
152
+
153
+
154
+
155
+ #データをコマンド形式で保存
156
+
157
+ declare -p Name Age >$DATA
158
+
159
+ ```

1

修正

2017/04/08 12:25

投稿

otn
otn

スコア84423

test CHANGED
@@ -12,7 +12,9 @@
12
12
 
13
13
  簡単には、スクリプトの先頭で、
14
14
 
15
+ `DATA=/tmp/hoge-hoge` (書き込める適当なファイル名)
16
+
15
- `test -f $HOME/data && source $HOME/data`
17
+ `test -f $DATA && source $DATA`
16
18
 
17
19
  これで、読み出し。
18
20
 
@@ -20,6 +22,6 @@
20
22
 
21
23
  スクリプト終了前に、
22
24
 
23
- `declare -p Name Age > $HOME/data`
25
+ `declare -p Name Age > $DATA`
24
26
 
25
27
  これで、保存。