No.1~20の連番ディレクトリ生成を作成しています。
実行結果がうまくできていないかと思うのですがどのように修正したらよろしいのでしょうか。具体的に修正をお願いします。
$ vim final.sh
$ chmod +x final.sh
$ ./final.sh
mkdir: cannot create directory 'No.01': File exists
mkdir: cannot create directory 'No.02': File exists
mkdir: cannot create directory 'No.03': File exists
mkdir: cannot create directory 'No.04': File exists
mkdir: cannot create directory 'No.05': File exists
mkdir: cannot create directory 'No.06': File exists
mkdir: cannot create directory 'No.07': File exists
mkdir: cannot create directory 'No.08': File exists
mkdir: cannot create directory 'No.09': File exists
mkdir: cannot create directory 'No.10': File exists
mkdir: cannot create directory 'No.11': File exists
mkdir: cannot create directory 'No.12': File exists
mkdir: cannot create directory 'No.13': File exists
mkdir: cannot create directory 'No.14': File exists
mkdir: cannot create directory 'No.15': File exists
mkdir: cannot create directory 'No.16': File exists
mkdir: cannot create directory 'No.17': File exists
mkdir: cannot create directory 'No.18': File exists
mkdir: cannot create directory 'No.19': File exists
mkdir: cannot create directory 'No.20': File exists
$ cat final.sh
#!/bin/bash
seq 20 | while read line
do
if [ $line -lt 10 ]
then
mkdir "No.0$line"
else
mkdir "No.$line"
fi
done
No.1ベストアンサー
- 回答日時:
私の環境に於いて以下のコマンドを実行すると...
$ mkdir "No.01"
$ mkdir "No.01"
mkdir: ディレクトリ `No.01' を作成できません: ファイルが存在します
となり、つまりご提示の状況は重複したディレクトリ名を次々に製作しようとしている、事になります。それ故、"No.0$line"がご質問者様想定の文字列に展開されていない可能性が最も高いと思われます。
そこで、先ずはスクリプト中の"mkdir"コマンドを"echo"に置き換えて、想定した文字列が表示されるかどうか確認することから始めるべきと思います。
ありがとうございます。
Echoにするとうまく表示できました。
これから要件を満たすにはどうしたらよいのでしょうか。
$ vim final.sh
$ chmod +x final.sh
$ ./final.sh
No.01
No.02
No.03
No.04
No.05
No.06
No.07
No.08
No.09
No.10
No.11
No.12
No.13
No.14
No.15
No.16
No.17
No.18
No.19
No.20
No.5
- 回答日時:
>少し修正してみました。
仕様が変わっています。
「修正」とは呼べません。
> for((; ;))の形を使わず
この質問のスクリプトは for を使わずに書いていて、
それを「修正」してforにしたのでしょ?
なら元に戻せばいいだけです。
ありがとうございます。
No.01からNo.20のディレクトリが無い状態での実行を想定しているのなら、No.01からNo.20のディレクトリを削除してから./final.shを実行します。
あるいは、新しいディレクトリを作ってそこで実行します。
「存在しない場合は作成する」という仕様なら、そのようにします。
・test, [] 等で存在を確認し、存在しない場合だけmkdirを実行する
・mkdir の -p オプションを使って存在していてもエラーにならないようにする
↑をコードに実際に書くとどのようになりますでしょうか。
No.4
- 回答日時:
mkdir: cannot create directory 'No.01': File exists
は、
mkdir: ディレクトリ `No.01' を作成できません: ファイルが存在します
と同じです。メッセージが元のままなのか日本語訳なのかの違いです。
mkdirは、作ろうとしているディレクトリと同名のディレクトリまたはファイルが既に存在するときには、エラーになります。
その際に、上記のエラーメッセージを出力します。
どんな課題か書いてないので違うかもしれませんが。
No.01からNo.20のディレクトリが無い状態での実行を想定しているのなら、No.01からNo.20のディレクトリを削除してから./final.shを実行します。
あるいは、新しいディレクトリを作ってそこで実行します。
「存在しない場合は作成する」という仕様なら、そのようにします。
・test, [] 等で存在を確認し、存在しない場合だけmkdirを実行する
・mkdir の -p オプションを使って存在していてもエラーにならないようにする
https://linuxjm.osdn.jp/html/GNU_fileutils/man1/ …
> -p, --parents
> 指定した名前のディレクトリが存在してもエラーメッセージを出力しない。
> 親ディレクトリが存在しない場合は、それも含めて作成する。
ありがとうございます。少し修正してみました。更に
以下のシェルスクリプトをfor((; ;))の形を使わずに修正するとどのように
書けますでしょうか。宜しくお願いします。
$ vim test.sh
$ cat test.sh
#!/bin/bash
for((i=1;i<=$1;i++));do
no="0$i"
if [ -d "./No.${no: -2}" ]; then
echo "No.${no:-2} Directory already exists!" 1>&2
else
mkdir "./No.${no: -2}"
fi
done
$ chmod +x test.sh
$ ./test.sh 20
・・・実行結果・・・
No.3
- 回答日時:
No1です。
私はcshしか解らないのでcshで試してみましたが、次のスクリプトで特に問題なくディレクトリを作成できました。
$ cat test
#!/bin/csh -f
set num = `seq -w 20`
set label = "No."
foreach dir ( $num )
set name = `echo $label``echo $dir`
mkdir $name
end
$ ./test
$ ls
No.01/ No.04/ No.07/ No.10/ No.13/ No.16/ No.19/
No.02/ No.05/ No.08/ No.11/ No.14/ No.17/ No.20/
No.03/ No.06/ No.09/ No.12/ No.15/ No.18/ test*
No.2
- 回答日時:
No1です。
ごめんなさい。先程の回答は明確に誤りが含まれますね。お詫びして訂正いたします。
私の環境に於いて以下を実行すると...
$ seq 20
1
2
3
4
5
となり、改行が入ってしまうことに注目します。一方、私の環境(csh)に於いて次に示すコマンドでは...
$ set Line = `seq 20`
$ echo "$Line"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
となり、改行が消えてしまいます。この辺りが問題解決のヒントになるのではないかと思います。
ありがとうございます。
先ほどから少しだけ中身をかえて
trkaさん指摘をもとに修正したみたつもりですが。。。
どのように訂正したらよろしいのでしょうか。
具体的に教えていただけると幸いです。
$ vim final.sh
$ chmod +x final.sh
$ ./final.sh
No.01
No.02
No.03
No.04
No.05
No.06
No.07
No.08
No.09
No.10
No.11
No.12
No.13
No.14
No.15
No.16
No.17
No.18
No.19
No.20
[education@centos-rpi3 ~]$ cat final.sh
#!/bin/bash
seq -w 20 | while read line
do
set Line = 'seq 20'
echo "No.$line"
done
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
face book で女性の方からline ...
-
1コールだけ鳴るけど切れる電話...
-
遠くにいる友達とLINE交換する...
-
ラインナップとラインアップは...
-
よく05(04)lineって見かけるん...
-
python flask から fastapiへの...
-
LINEで好きな人が「笑」を全然つ...
-
生産ラインの品質を表す直行率...
-
Windowsのバッチファイルで正規...
-
法線(normal line)はなぜそう...
-
swift言語のprintln()関数で「p...
-
line誤爆してしまいました 全く...
-
着信拒否、ラインブロックと解...
-
2000年生まれなのですが 00line...
-
「一番上、真ん中、下」を示す英語
-
「一点鎖線」を英語でいうと?
-
line でおはようございます、の...
-
毎月記念日をlineで祝うのって...
-
質問です。 先日クラスの女子に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
相手側の携帯が電源切れてる時...
-
1コールだけ鳴るけど切れる電話...
-
face book で女性の方からline ...
-
よく05(04)lineって見かけるん...
-
Windowsのバッチファイルで正規...
-
法線(normal line)はなぜそう...
-
遠くにいる友達とLINE交換する...
-
「一番上、真ん中、下」を示す英語
-
LINEで好きな人が「笑」を全然つ...
-
生産ラインの品質を表す直行率...
-
python flask から fastapiへの...
-
lineのワン切り、なぜ?
-
毎月記念日をlineで祝うのって...
-
line でおはようございます、の...
-
会社の先輩とLINE プライベート...
-
2000年生まれなのですが 00line...
-
ある男子から、ライン追加され...
-
まだそんなに親しくない相手と...
-
並立と並列の違いってなんですか?
-
タイトルの改行
おすすめ情報