1. 程式人生 > >shell指令碼學習筆記(shell指令碼實現檔案的建立)

shell指令碼學習筆記(shell指令碼實現檔案的建立)

#!/bin/bash                                                                     
function is_dir()
{
    local dir=$1
    if [ -d ${dir} ];then
            return 0
    else
            return 1
    fi  
}
for val in [email protected]
do
    if is_dir ${val};then
                :
    else
        echo "create it!"
        mkdir ${val}  > /dev/null 2>&1
        if [ $? -ne 0 ];then
            echo "create ${val} failed"
            exit 1
        fi  
    fi  
done

這是我實現的一個shell指令碼,他可以用來建立資料夾,當然是有條件的建立的。如果檔案不存在那麼就不建立,若存在則建立。

首先引數是以命令列引數的形式傳進去的,在執行這個指令碼的時候將要建立的檔案的名字帶上,在指令碼內部,有一個函式是用來判斷要建立的檔案是否已存在,for迴圈中拿到該函式的退出狀態來判斷是否需要建立它。

此外在該指令碼中用到了 mkdir ${val} > /dev/null 2>&1  我就來說說這些語句吧。

1.  首先數字 0,1,2 這些相信大家都知道吧,在linux中: 0---標準輸入 1---標準輸出  2---標準錯誤

2.  在linux中 >,<,>> ,<<  這四個符號分別代表 輸出重定向,輸入重定向,輸出追加重定向,輸入追加重定向 ;其中追加重定向意思是:假如你重定向的目標是一個檔案,那麼簡單重定向會覆蓋原來檔案的內容(在寫程式碼時切記,否則傷心不是別人喲),而追加重定向是在原問價末尾跟上輸入輸出的內容

3.  2>&1 這句話的意思是 將標準錯誤輸出重定向等同於標準輸出;其中&1表示等同於的意思,但是&若跟在末尾則表示在後臺執行的意思,這還是要區別開來的。

4.  mkdir ${val} > /dev/null 這表示建立檔案時的相關的輸出資訊重定向到空的裝置檔案。其實 mkdir ${val} > /dev/null 2>&1  <-> mkdir ${val} 1 > dev/null 2>&1 後面的這種寫法更能讓人理解,首先將標準輸出1重定向到空的裝置檔案,再將標準錯誤重定向到標準輸出1,那麼整句話的意思是將標準輸出和標準錯誤都重定向到了空的裝置檔案,意思也就是清空,所以這樣寫可以用來避免shell命令或者程式的內容輸出

執行結果如下:

可以看出確實創建出了檔案,但是有人問:你不是將輸出“遮蔽”了嗎,為什麼還有兩行輸出,你是不搞錯了,真菜...

其實我遮蔽的只是建立檔案的相關資訊,並不是所有資訊,因為在重定向之前有一句echo語句,它的輸出還是標準輸出,所以我們可以看到兩行輸出。

相關推薦

shell指令碼學習筆記 正則表示式

         正則表示式一般有三個部分組成,他們分別是:字元類,數量限定符,位置限定符。規定一些特殊語法表示字元類、數 量限定符和位置關係,然後用這些特殊語法和普通字元一起表示一個模式,這就是正則

shell指令碼學習筆記一、shell指令碼變數語法

sh檔案用"#!"開頭表示用什麼來執行程式,如"#!/bin/bash" 表示用bin/bash來執行sh sh檔案,預設是文字檔案,是不可以執行的,可以通過chmod允許sh檔案可以被執行,chmod命令說明如下: chmod----改變一個或多個檔案的存取模式(mode) chmod

shell指令碼學習筆記

 一、位於第一行的#! 當一個檔案中開頭是#!時,核心會掃描改行的剩餘部分,看是否存在可用來執行程式的直譯器的完整路徑,此外核心還會掃描是否有一個選項要傳給直譯器,核心會以指定的選項來引用直譯器,在搭配命令列的其他部分。 例如: 有一個csh指令碼,名為/usr/ucb

shell程式設計學習筆記

導讀 注意,這篇部落格是記錄博主學習的筆記,撰寫風格可能不適合沒有程式設計基礎的讀者。 變數 定義 不需要宣告型別,只需要加賦值號(=) 輸入 輸出 name=’hemim’ echo $name hemim 只能以數字和下劃線開頭,如:

shell程式設計學習筆記1

接觸到linux已經有2-3年了,一些基本的命令用的還算很熟,但一直沒有系統的對linux進行學習,可以說學的的很零散,遇到問題一般通過網路也能找到答案。 最近突然不忙了,想系統的學習一下shell程式設計。可以說對linux的熟悉離不開對shell的學習,而作為一個好的系

OpenLDAP學習筆記基於OpenLDAP-2.4.x

ldap slapd 同步 1.1、什麽是目錄服務(Directory Services)? 目錄是一個特殊的數據庫,專門用於搜索和瀏覽,另外也支持基本的查詢和更新功能。 目錄是一個為查詢、瀏覽和搜索而優化的專業分布式數據庫,它呈樹狀結構組織數據,就好象Linux/Unix系統中的文件

【轉】Python3學習筆記urllib模塊的使用

nal 方法 utf 網址 pin des IE tps erer 原文地址:https://www.cnblogs.com/Lands-ljk/p/5447127.html 1.基本方法 urllib.request.urlopen(url, data=None, [ti

RabbitMQ學習筆記第一章:Rabbit簡介

處理機制 有用 都在 參數 ket 統一 宋體 interface 自己 RabbitMQ是目前非常熱門的一款消息中間件,不管是互聯網行業還是傳統行業都在大量地使用。RabbitMQ憑借其高可靠、易擴展、高可用及豐富的功能特性受到了越來越多的企業的青睞。 (一)什麽是消息中

Python學習筆記從零開始到放棄Python 入門第一部分

目錄 前言 python基礎 變數 宣告變數 變數定義的規則: 九九乘法表實現 註釋: Pycharm設定: 程式碼開頭自動生成資訊: pycharm多行註釋快捷鍵ctrl+? 格式化輸出 佔位符 賬號密碼登陸器(for,while,break,c

廖雪峰 JavaScript 學習筆記字串、陣列和物件

字串 1.和python一樣,也是用' '或" "括起來的字元表示。但多行字串是用反引號(esc下鍵)``,與之相對的是Python用''' '''三引號表示; 2.轉義字元:\ 3.換行符:\n 4.製表符:\t 5.多個字串用 + 連線 6.模板字串: ${變數}  例

《機器學習實戰》第14章學習筆記資料約簡工具---SVD

一、SVD基本原理 提取這些資訊的方法稱為奇異值分解(Singular Value Decomposition, SVD )。 在很多情況下,資料中的一小段攜帶了資料集中的大部分資訊,其他資訊則要麼是噪聲,要麼就是毫不相關的資訊。線上性代數中還有很多矩陣分解技術。矩陣分解可以將原始矩陣表示成新的

虛樹學習筆記洛谷2495 消耗戰

題目連結 因為辣雞csdn,導致之前快寫好的部落格沒了 QWQ悲傷逆流成河qwqqq 首先虛樹,這個東西,我感覺是一種思想,或者是方法,而並不是一個數據結構什麼的。 他主要是用來解決:給出一棵樹,每次詢問選擇一些關鍵點,求一些資訊。 這些資訊的特點是,許多未選擇的點可以通過某種方式剔除而

莫比烏斯反演學習筆記轉載自An_Account大佬

有一個 多人 rac 導出 公式 i++ 約數 n) 得出 轉載自An_Account大佬 提示:別用莫比烏斯反演公式,會炸的 只需要記住: [gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d)[g

灰色預測模型的學習筆記MATLAB 包含模型的建立 求解 及檢驗

本博文是本人在學習灰色預測模型時所做的筆記,原理及程式碼部分都是基於學習各位大佬的博文,詳見後面的參考, 一、 實操,利用灰色預測模型預測未來十年湖南的人口數量 二、 具體實現,從國家統計局獲取湖南省過去十年的人口資料,作為原始資料,見Excel檔案,利用MAT

Spring Boot學習筆記Spring Boot 和 activeMQ整合

Spring Boot學習筆記使用步驟: Spring Boot:並不是不對 Spring 功能上的增強,而是提供了一種快速使用 Spring 的方式。 使用步驟: 1、起步依賴:pom.xml中配置起步依賴,會自動匯入spring相關的許多jar包 <

python3語言學習筆記六:模組+輸入輸出

引入模組 import 模組名     使用時:模組名.函式名(引數) from 模組名 import 函式名 使用時:函式名(引數) import 模組名.* 使用時:函式名(引數) 格式化字串 方式一:使用str.format() 方式二:使用%格式化字串

目標檢測網路學習筆記RCNN-SPPnet-Fast/Faster RCNN

一 、RCNN:Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5) Ross Girshick Jeff Donahue Trev

Boosting學習筆記Adboost、GBDT、Xgboost

http://www.cnblogs.com/willnote/p/6801496.html 總結得不錯 AdaBoost是最著名的Boosting族演算法。開始時,所有樣本的權重相同,訓練得到第一個基分類器。從第二輪開始,每輪開始前都先根據上一輪基分類器的分類效果調整每個樣本的權重,上一輪分錯的

Vue學習筆記Class與style繫結

1.Class繫結 在Vue中,如果要為這樣的一個div的class屬性進行動態賦值 <div class="active text-danger">class1</div> 可以使用v-bind,一般有以下三種寫法: <div v-bind:c