teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

スクリプト追加

2017/04/08 12:26

投稿

otn
otn

スコア86349

answer CHANGED
@@ -11,4 +11,70 @@
11
11
 
12
12
  スクリプト終了前に、
13
13
  `declare -p Name Age > $DATA`
14
- これで、保存。
14
+ これで、保存。
15
+
16
+ #追記
17
+ データ保存出来ない以外は大体出来ているのかと思っていたら、色々間違いがあるので、間違いを直しました。
18
+ エラーチェックなど全然無いのはそのままです。また、コマンドインジェクション脆弱性もあります。
19
+ ```Bash
20
+ #!/bin/bash
21
+ echo "Content-Type: text/plain"
22
+ echo ""
23
+
24
+ DATA=/tmp/hoge-hoge
25
+ if test -f $DATA
26
+ then source $DATA #データファイルが存在すれば実行する
27
+ else deleteall #データファイルが無ければ、初期化
28
+ fi
29
+
30
+ #データ追加
31
+ function add {
32
+ Name+=("$1")
33
+ Age+=("$2")
34
+ }
35
+
36
+ #データ初期化
37
+ function deleteall {
38
+ Name=()
39
+ Age=()
40
+ }
41
+
42
+ #データ検索
43
+ function check {
44
+ for ((i = 0; i < ${#Name[@]}; i++)) {
45
+ if test "${Name[$i]}" = "$1"
46
+ then
47
+ echo "${Name[i]} : ${Age[i]}"
48
+ fi
49
+ }
50
+ }
51
+
52
+ #URL引数を変数にセット
53
+ XIFS="$IFS"
54
+ IFS="&"
55
+ set -- $QUERY_STRING
56
+ IFS="$XIFS"
57
+
58
+ for arg
59
+ do case "$arg" in
60
+ function=*) function=${arg#function=} ;;
61
+ name=*) name=${arg#name=} ;;
62
+ age=*) age=${arg#age=} ;;
63
+ esac
64
+ done
65
+ echo "function: $function"
66
+ echo "name: $name"
67
+ echo "age: $age"
68
+
69
+ case "$function" in
70
+ "add")
71
+ add "$name" "$age" ;;
72
+ "deleteall")
73
+ deleteall;;
74
+ "check")
75
+ check "$name";;
76
+ esac
77
+
78
+ #データをコマンド形式で保存
79
+ declare -p Name Age >$DATA
80
+ ```

1

修正

2017/04/08 12:25

投稿

otn
otn

スコア86349

answer CHANGED
@@ -5,9 +5,10 @@
5
5
  プログラミング学習目的のようなので、ファイルに書くので良いかと思います。
6
6
 
7
7
  簡単には、スクリプトの先頭で、
8
+ `DATA=/tmp/hoge-hoge` (書き込める適当なファイル名)
8
- `test -f $HOME/data && source $HOME/data`
9
+ `test -f $DATA && source $DATA`
9
10
  これで、読み出し。
10
11
 
11
12
  スクリプト終了前に、
12
- `declare -p Name Age > $HOME/data`
13
+ `declare -p Name Age > $DATA`
13
14
  これで、保存。