回答編集履歴

6

回答修正:コード修正 stderrを/dev/nullへ

2017/02/22 03:38

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  test=/tmp/dir1/*.txt
14
14
 
15
- filecnt=`ls -1 $test | wc -l`
15
+ filecnt=`ls -1 $test 2>/dev/null | wc -l`
16
16
 
17
17
  if [ $filecnt -eq 0 ]; then
18
18
 
@@ -64,7 +64,7 @@
64
64
 
65
65
  test=/tmp/dir1/data.txt
66
66
 
67
- filelines=`cat $test | wc -l`
67
+ filelines=`cat $test 2>/dev/null | wc -l`
68
68
 
69
69
  if [ $filelines -eq 0 ]; then
70
70
 

5

回答編集:追加したコードの変数名修正

2017/02/22 03:38

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -64,13 +64,13 @@
64
64
 
65
65
  test=/tmp/dir1/data.txt
66
66
 
67
- filecnt=`cat $test | wc -l`
67
+ filelines=`cat $test | wc -l`
68
68
 
69
- if [ $filecnt -eq 0 ]; then
69
+ if [ $filelines -eq 0 ]; then
70
70
 
71
71
  echo "ファイルが存在しないかまたは内容はゼロ行です"
72
72
 
73
- elif [ $filecnt -eq 1 ]; then
73
+ elif [ $filelines -eq 1 ]; then
74
74
 
75
75
  echo "ファイルの内容は一行です"
76
76
 

4

回答追加:ファイル数でなくファイル内の行数であった場合の回答を追加

2017/02/22 03:25

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -3,10 +3,6 @@
3
3
 
4
4
 
5
5
  これが「testで指定されたファイルPATHのファイル数」という解釈でいいのでしょうか?
6
-
7
-
8
-
9
- こういうことですか?
10
6
 
11
7
 
12
8
 
@@ -54,6 +50,60 @@
54
50
 
55
51
 
56
52
 
53
+ ----
54
+
55
+
56
+
57
+ もし、「testで指定されたファイルの行数」であれば
58
+
59
+
60
+
61
+ ```
62
+
63
+ #!/bin/sh
64
+
65
+ test=/tmp/dir1/data.txt
66
+
67
+ filecnt=`cat $test | wc -l`
68
+
69
+ if [ $filecnt -eq 0 ]; then
70
+
71
+ echo "ファイルが存在しないかまたは内容はゼロ行です"
72
+
73
+ elif [ $filecnt -eq 1 ]; then
74
+
75
+ echo "ファイルの内容は一行です"
76
+
77
+ exit 9
78
+
79
+ else
80
+
81
+ echo "ファイルは二行以上です"
82
+
83
+ fi;
84
+
85
+ exit 0
86
+
87
+ ```
88
+
89
+
90
+
91
+ 実行結果
92
+
93
+
94
+
95
+ > $ cat /tmp/dir1/data.txt
96
+
97
+ > 1 line
98
+
99
+ > $ ./test.sh
100
+
101
+ > ファイルの内容は一行です
102
+
103
+ > $ echo $?
104
+
105
+ > 9
106
+
57
107
 
58
108
 
59
109
  ----

3

回答編集:コード編集 ls/wcコマンドの実行回数を減らした。

2017/02/22 03:22

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -16,11 +16,13 @@
16
16
 
17
17
  test=/tmp/dir1/*.txt
18
18
 
19
+ filecnt=`ls -1 $test | wc -l`
20
+
19
- if [ `ls -1 $test | wc -l` -eq 0 ]; then
21
+ if [ $filecnt -eq 0 ]; then
20
22
 
21
23
  echo "ファイルはありません"
22
24
 
23
- elif [ `ls -1 $test | wc -l` -eq 1 ]; then
25
+ elif [ $filecnt -eq 1 ]; then
24
26
 
25
27
  echo "ファイルは一件です"
26
28
 

2

回答編集:実行結果追加 etc

2017/02/21 06:21

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -18,23 +18,39 @@
18
18
 
19
19
  if [ `ls -1 $test | wc -l` -eq 0 ]; then
20
20
 
21
- echo "$test is no files"
21
+ echo "ファイルはありません"
22
22
 
23
23
  elif [ `ls -1 $test | wc -l` -eq 1 ]; then
24
24
 
25
- echo "$test is 1 files"
25
+ echo "ファイルは一件です"
26
26
 
27
27
  exit 9
28
28
 
29
29
  else
30
30
 
31
- echo "$test is more file"
31
+ echo "ファイルは2件以上です"
32
32
 
33
33
  fi;
34
34
 
35
35
  exit 0
36
36
 
37
37
  ```
38
+
39
+
40
+
41
+ 実行結果
42
+
43
+
44
+
45
+ > $ ./test.sh
46
+
47
+ > ファイルは一件です
48
+
49
+ > $ echo $?
50
+
51
+ > 9
52
+
53
+
38
54
 
39
55
 
40
56
 

1

追記

2017/02/21 05:23

投稿

Y.H.
Y.H.

スコア7914

test CHANGED
@@ -24,10 +24,38 @@
24
24
 
25
25
  echo "$test is 1 files"
26
26
 
27
+ exit 9
28
+
27
29
  else
28
30
 
29
31
  echo "$test is more file"
30
32
 
31
33
  fi;
32
34
 
35
+ exit 0
36
+
33
37
  ```
38
+
39
+
40
+
41
+ ----
42
+
43
+
44
+
45
+ > うまくいかない
46
+
47
+
48
+
49
+ エラーが表示される場合は質問にエラーメッセージを記入しましょう。
50
+
51
+
52
+
53
+ ```
54
+
55
+ $ ./test2.sh
56
+
57
+ ./test2.sh: line 6: 期待してない token `fi' のあたりにシンタックスエラー
58
+
59
+ ./test2.sh: line 6: `fi'
60
+
61
+ ```