大佬說,你這自學(xué)進(jìn)度太慢了,先把Linux20題搞定了再詳談。于是趕緊翻出題目來寫代碼,前面四題半都超easy(畢竟基礎(chǔ)到底了),做到第五題的時(shí)候終于卡殼了,題干如下:
在任意文件夾下面創(chuàng)建 folder1~5這5個(gè)文件夾,然后每個(gè)文件夾下面繼續(xù)創(chuàng)建 folder1~5這5個(gè)文件夾。
乍一看很簡(jiǎn)單,是的,用最樸素的方法可以實(shí)現(xiàn):
# 先創(chuàng)建5個(gè)文件夾
$ mkdir folder1 folder2 folder3 folder4 folder5
$ cd folder1
$ mkdir folder1 folder2 folder3 folder4 folder5
$ cd ..
$ cd folder2
$ mkdir folder1 folder2 folder3 folder4 folder5
$ cd ..
$ cd folder3
$ mkdir folder1 folder2 folder3 folder4 folder5
$ cd ..
$ cd folder4
$ mkdir folder1 folder2 folder3 folder4 folder5
$ cd ..
$ cd folder5
$ mkdir folder1 folder2 folder3 folder4 folder5
# 然后tree一下,應(yīng)該是這個(gè)樣子的:
├── folder1
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder2
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder3
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder4
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
└── folder5
├── folder1
├── folder2
├── folder3
├── folder4
└── folder5
如果真的這樣操作,絕對(duì)是對(duì)精神和體力的雙重摧殘。而且出題人的意圖明顯不是考察這個(gè)點(diǎn),而是用shell腳本寫循環(huán)。敲代碼前覺得不會(huì)難到哪里去吧,畢竟都看過書三遍了。可是真要寫的時(shí)候突然發(fā)現(xiàn)竟然不確定該用哪個(gè)循環(huán)!先試了試 if 語(yǔ)句,試了幾次都不行,又回去看書。哦,if 語(yǔ)句只是單次判斷,不會(huì)歷遍變量中的每個(gè)值(真不好意思說書已經(jīng)看了三遍)。
ok,應(yīng)該使用 for 循環(huán),看名字就是循環(huán)嘛。第一次寫的腳本是這樣的:
# 首先是創(chuàng)建5個(gè)文件夾 (簡(jiǎn)單方法)
$ mkdir folder{1..5}
#然后是用 vim 寫腳本 ,命名為script(第一次錯(cuò)誤版本)
#! /bin/bash
for folder in folder1 folder2 folder3 folder4 folder5
do cd $folder; mkdir folder{1..5}
done
#運(yùn)行腳本
$ ./script
# 結(jié)果卻是這個(gè)鬼樣子!
.
├── folder1
│ ├── folder1
│ ├── folder2
│ │ ├── folder1
│ │ ├── folder2
│ │ ├── folder3
│ │ │ ├── folder1
│ │ │ ├── folder2
│ │ │ ├── folder3
│ │ │ ├── folder4
│ │ │ │ ├── folder1
│ │ │ │ ├── folder2
│ │ │ │ ├── folder3
│ │ │ │ ├── folder4
│ │ │ │ └── folder5
│ │ │ │ ├── folder1
│ │ │ │ ├── folder2
│ │ │ │ ├── folder3
│ │ │ │ ├── folder4
│ │ │ │ └── folder5
│ │ │ └── folder5
│ │ ├── folder4
│ │ └── folder5
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder2
├── folder3
├── folder4
├── folder5
確實(shí)發(fā)生了循環(huán),但是循環(huán)的位置不對(duì)。本來應(yīng)該是處理完 folder1 就要去處理 folder2,以此類推。不過根據(jù)結(jié)果看,實(shí)際是在 folder1 里面陷入了自循環(huán),沒有逃出來。到底是哪里的問題?反過來想,既然是沒有逃出來,那就加個(gè)命令循環(huán)回歸正軌,修改后發(fā)現(xiàn)運(yùn)行正確!如下:
#直接修改上面的 vim 腳本 ,(第二次正確版本)
#! /bin/bash
for folder in folder1 folder2 folder3 folder4 folder5
do cd $folder; mkdir folder{1..5}; cd ..
done
#運(yùn)行腳本
$ ./script
# 結(jié)果是這個(gè)好看的樣子!
.
├── folder1
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder2
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder3
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
├── folder4
│ ├── folder1
│ ├── folder2
│ ├── folder3
│ ├── folder4
│ └── folder5
└── folder5
├── folder1
├── folder2
├── folder3
├── folder4
└── folder5
區(qū)別很細(xì)微,仔細(xì)看可以發(fā)現(xiàn)。其實(shí)省略了一些犯的其他的錯(cuò)誤,整個(gè)摸索的過程花了2個(gè)小時(shí)!感到欣慰的是整個(gè)過程沒有焦慮,一點(diǎn)點(diǎn)接近真相,當(dāng)最后一次嘗試終于成功,喜不自勝~
不過也反映了自學(xué)過程中一個(gè)很嚴(yán)重的問題:看的多,練的少。很多東西覺得明白了,其實(shí)只是覺得明白了,真的操練起來就是totally another story了。
紙上得來終覺淺,絕知此事要躬行。