學(xué)生信的那些事兒之十 - 如何用shell腳本創(chuàng)建套娃式目錄

大佬說,你這自學(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了。

紙上得來終覺淺,絕知此事要躬行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 第 2 章 SHELL 基礎(chǔ)知識(shí)2.1 shell腳本我們?cè)谏厦婧?jiǎn)單介紹了一下什么是shell腳本,現(xiàn)在我們來進(jìn)一...
    LiWei_9e4b閱讀 1,591評(píng)論 0 0
  • 今天是我正式上班第八天,也是認(rèn)籌的第一單,成交才算轉(zhuǎn)正?,F(xiàn)在還不算。我把客戶當(dāng)成自己買房,同時(shí)根據(jù)客戶的需求(經(jīng)濟(jì)...
    追求成功的實(shí)踐者閱讀 147評(píng)論 0 0
  • 今天是2018年度最后一個(gè)交易日了,盤面仍然不給力,沒有掙幾個(gè)錢。 指數(shù)雖然漲了一點(diǎn),但我的持倉(cāng)漲跌都有。關(guān)鍵是市...
    直到我遇見忙閱讀 109評(píng)論 0 0
  • 1.思想: 這兩天不斷對(duì)周六的交流會(huì)進(jìn)行了復(fù)盤,通過復(fù)盤讓我找到了自己需要改進(jìn)的地方,針對(duì)此次自我反省,列出清...
    芳_41ca閱讀 277評(píng)論 0 2
  • 今晚,我的一個(gè)上大一的學(xué)生過來,放寒假了,過來找我聊聊。我全天有課,晚上也有課,就只能約到晚上學(xué)生做題的空...
    A瀚海閱讀 569評(píng)論 0 5