1. 程式人生 > >bash 總結

bash 總結

bsah

I/O重定向
標準輸出重定向
   > :覆蓋重定向,目標文件中的原有內容會被消除
   >> :追加重定向,新內容會追加至目標文件尾部
   set -C :禁止將內容覆蓋輸出到已有的文件中 <只在當前shell中有效>
     若要強制覆蓋可以使用 >| 例如 cat /etc/fstab >| /tmp/aa.txt
   set +C:關閉以上功能
   [[email protected] ~]# ls /var > /tmp/etc.out 
   [[email protected] ~]# ls /var/log/ >> /tmp/etc.out
標準錯誤重定向
 
 [[email protected]
/* */ ~]# cat /etc/issuee 2> /tmp/issue.txt [[email protected] ~]# cat /tmp/issue.txt cat: /etc/issuee: No such file or directory [[email protected] ~]# cat /etc/issue 2> /tmp/issue.txt CentOS release 6.5 (Final) Kernel \r on an \m [[email protected] ~]# cat /tmp/issue.txt 發現文件是空的,因為沒有錯誤輸出,所以2>只能重定向錯誤輸出 2> :覆蓋從定向錯誤輸出 2>> :追加重定向錯誤輸出 將標準輸出和錯誤輸出各自定向到不同位置: [[email protected]
/* */ ~]# tail -100 /etc/rc.d/rc.sysinit > /tmp/sysinit.out 2> /tmp/sysinit.err [[email protected] ~]# cat /tmp/sysinit.err 這個文件是空的 [[email protected] ~]# cat /tmp/sysinit.out 這個文件是標準輸出 [[email protected] ~]# tail -100 /etc/rc.d/rc.sysinidddt > /tmp/sysinit.out 2> /tmp/sysinit.err [[email protected]
/* */ ~]# cat /tmp/sysinit.err tail: cannot open `/etc/rc.d/rc.sysinidddt‘ for reading: No such file or directory 可以合並標準輸出和錯誤輸出為同一個數據流進行重定向 &> 覆蓋重定向 &>> 追加重定向 [[email protected] ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin You have new mail in /var/spool/mail/root [[email protected] ~]# echo $PATH &> /tmp/path.out [[email protected] ~]# cat /tmp/path.out /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [[email protected] ~]# [[email protected] ~]# echoooo $PATH &> /tmp/path.out [[email protected] ~]# cat /tmp/path.out -bash: echoooo: command not found 特殊寫法:將標準輸出和錯誤輸出寫到同一個文件可以使用2>&1 [[email protected] ~]# echo "$PATH" > /tmp/path.out 2>&1 [[email protected] ~]# echoddd "$PATH" >> /tmp/path.out 2>&1 [[email protected] ~]# cat /tmp/path.out /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin -bash: echoddd: command not found 輸入重定向:將原本需要有鍵盤輸入的數據,同過文件來讀入。 < [[email protected] ~]# useradd jerry [[email protected] ~]# vi pass.txt [[email protected] ~]# passwd --stdin jerry < pass.txt [[email protected] ~]# cat aa.txt test stdin 使用cat命令在鍵盤上輸入一些數據,然後寫入catfile文件中 [[email protected] ~]# cat > catfile testing cat file tset 輸入crtl+d結束 此時就會有catfile文件產生,而且該文件的內容就是剛剛輸入的內容,那麽是否可以使用其他文件來替換鍵盤輸入呢 [[email protected] ~]# cat > catfile < aa.txt [[email protected] ~]# cat catfile test stdin [[email protected] ~]# 我們可以用cat直接將輸入的消息輸出到catfile中,並且當輸入EOF時,該次輸入就結束,可以這樣做 [[email protected] ~]# cat > catfile <<EOF > this is a test testing > ok now stop > EOF You have new mail in /var/spool/mail/root [[email protected] ~]# cat catfile this is a test testing ok now stop [[email protected] ~]# [[email protected] ~]# tr abc ABC < /etc/fstab # # /etC/fstAB # CreAted By AnACondA on Thu Jun 2 19:35:06 2016 # # ACCessiBle filesystems, By referenCe, Are mAintAined under ‘/dev/disk‘ # See mAn pAges fstAB(5), findfs(8), mount(8) And/or Blkid(8) for more info # /dev/mApper/vg_Centos01-lv_root / ext4 defAults 1 1 UUID=3BB70B22-A906-43eA-97d1-CA28485AfeC7 /Boot ext4 defAults 1 2 /dev/mApper/vg_Centos01-lv_home /home ext4 defAults 1 2 /dev/mApper/vg_Centos01-lv_swAp swAp swAp defAults 0 0 tmpfs /dev/shm tmpfs defAults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defAults 0 0 proC /proC proC defAults 0 0 [[email protected] ~]# tr ‘a-z‘ ‘A-Z‘ < /etc/fstab # # /ETC/FSTAB # CREATED BY ANACONDA ON THU JUN 2 19:35:06 2016 # # ACCESSIBLE FILESYSTEMS, BY REFERENCE, ARE MAINTAINED UNDER ‘/DEV/DISK‘ # SEE MAN PAGES FSTAB(5), FINDFS(8), MOUNT(8) AND/OR BLKID(8) FOR MORE INFO # /DEV/MAPPER/VG_CENTOS01-LV_ROOT / EXT4 DEFAULTS 1 1 UUID=3BB70B22-A906-43EA-97D1-CA28485AFEC7 /BOOT EXT4 DEFAULTS 1 2 /DEV/MAPPER/VG_CENTOS01-LV_HOME /HOME EXT4 DEFAULTS 1 2 /DEV/MAPPER/VG_CENTOS01-LV_SWAP SWAP SWAP DEFAULTS 0 0 TMPFS /DEV/SHM TMPFS DEFAULTS 0 0 DEVPTS /DEV/PTS DEVPTS GID=5,MODE=620 0 0 SYSFS /SYS SYSFS DEFAULTS 0 0 PROC /PROC PROC DEFAULTS 0 0 [[email protected] ~]# tr -d abc alpha lph amnbak mnk 此處生成文檔 [[email protected] ~]# cat << EOF > how are you? > how old are you? > EOF how are you? how old are you? [[email protected] ~]# cat >> /tmp/test.out << EOF > how are you? > how old are you? > EOF [[email protected] ~]# cat /tmp/test.out how are you? how old are you? 利用<<右側的控制符,可以終止一次輸入,而不必輸入ctrl+d來結束。這對程序的編寫很有幫助。那麽為什麽要使用命令輸出重定向呢?如果沒有接觸過腳本,這個問題一定會很難理解,下面是一些命令輸出重定向的場合: 1. 當屏幕輸出的信息很重要,而且我們需要將它存下來的時候 2. 後臺執行的程序,不希望它幹擾屏幕正常的輸出結果 3. 一些系統的例行命令的執行結果,希望它可以存下來 4. 一些執行命令,我們已經知道它可能的錯誤消息,所以想以2>/dev/null將它丟掉 5. 錯誤消息與正確消息需要分別輸出 大家都知道每個命令都有輸入和輸出,我們可不可以把前一個命令的輸出當做後面命令的輸入,大家都知道一個命令的輸入可以從一個文件中讀取,能不能從前一個命令中讀取呢,這種機制就叫做管道,管道即把第一個命令的輸出送給第二個命令當輸入 [[email protected] ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [[email protected] ~]# echo $PATH | tr ‘a-z‘ ‘A-Z‘ /USR/LIB64/QT-3.3/BIN:/USR/LOCAL/SBIN:/USR/LOCAL/BIN:/SBIN:/BIN:/USR/SBIN:/USR/BIN:/ROOT/BIN [[email protected] ~]# echo $PATH | tr ‘a-z‘ ‘A-Z‘| tr -d ‘U‘ /SR/LIB64/QT-3.3/BIN:/SR/LOCAL/SBIN:/SR/LOCAL/BIN:/SBIN:/BIN:/SR/SBIN:/SR/BIN:/ROOT/BINYou have [[email protected] ~]# ls -al /etc | less 使用ls命令輸出後的內容,就能夠被less讀取,並且利用less的功能,我們就能夠前後翻動相關的信息,很方便 將登陸到系統上的用戶信息中的後3行的信息轉換為大寫字母後保存至/tmp/who.out文件中 [[email protected] ~]# who | tail -n 3 | tr ‘a-z‘ ‘A-Z‘ > /tmp/who.out 將/etc/passwd/文件中的前5行內容轉換為大寫後保存至/tmp/passwd.out文件中 [[email protected] ~]# cat /etc/passwd | head -n 5 | tr ‘a-z‘ ‘A-Z‘ > /tmp/passwd.out [[email protected] ~]# cat /tmp/passwd.out ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN 腳本示例 1. 創建一個組newgroup,id號為4000 2. 創建一個用戶test,id號為3001,附加組為newgroup 3. 創建目錄/tmp/hellod 4. 復制/etc/fstab至上面的目錄中 5. 改變目錄及內部文件的屬主和屬組為test 6. 讓目錄及內部文件的其他用戶沒有任何權限 [[email protected] ~]# cat aa.sh #!/bin/bash groupadd -g 4000 newgroup useradd -u 3001 -G newgroup test mkdir /tmp/hellod cp /etc/fstab /tmp/hellod chown -R test:test /tmp/hellod chmod -R o= /tmp/hellod 變量的命名要求 只能使用數字、字母、下劃線組成 不能以數字開頭 不能使用程序中關鍵字 要做到見名之意 awk可以處理後續文件,也可以讀取來自前一個命令的標準輸出。awk主要是處理“每一行字段內的數據”,而默認的字段分隔符為空格鍵或tab鍵,舉例來說,用last可以將登錄者的數據取出來,結果如圖所示: 若想取出賬號與登錄者的IP地址,且賬號與IP地址之間以tab鍵隔開,則會變成這樣: [[email protected] ~]# last | awk ‘{print $1 "\t" $3}‘ root 192.168.1.100 root 192.168.1.100 reboot boot root :0.0 root :0 awk是以行尾處理單位,而以字段為最小的處理單位 特殊變量: $0;腳本名稱自身 $?: 上一條命令的執行狀態,狀態用數字來表示:0-255 0表示成功,1-255表示失敗 命令執行成功了,成功的標記叫狀態返回值,而正常的命令執行後的結果叫返回值。


本文出自 “劉小兔” 博客,謝絕轉載!

bash 總結

相關推薦

bash 總結

bsahI/O重定向 標準輸出重定向 > :覆蓋重定向,目標文件中的原有內容會被消除 >> :追加重定向,新內容會追加至目標文件尾部 set -C :禁止將內容覆蓋輸出到已有的文件中 <只在當前shell中有效> 若要強制覆蓋可以使用 >| 例如

Linux bash總結(一) 基礎部分(適合初學者學習和非初學者參考)

歡迎使用Markdown編輯器 你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。 新的改變 我們對Markdown編輯器進行了一些功能

Linux bash總結(二) 高階部分(適合初學者學習和非初學者參考)

 版本號說明作者日期 1.0 新增awk和sed的說明 Sky Wang2013/05/31 1.1 (01) 新增正則表示式(第3部分)(02) 修改awk中錯誤內容 Sky Wang 2013/06/05 本文主要通過例項對bash中需要用到的一些高階工具(如awk、se

Bash腳本編程總結

聲明 list 整數 != 單個字符 調用函數 all 給定 開頭 bash腳本編程之用戶交互: read [option]… [name …] -p ‘PROMPT’ -t TIMEOUT bash -n /path/to/some_script 檢測腳本中的語法錯

12、bash腳本變量總結

bash變量總結bash編程之變量(我們現在要總結了)1、bash的內置變量:全大寫的,如下的一些變量PATH PS1 HOSTNAME UID HISTFILE HISTSIZE HISTEILESIZE HISTCONTROL(命令是如何保存在命令歷史中的)$BASH:bash二進制程序文件的路徑$BAS

bash Shell 總結《二》

ja1. 命令的退出狀態 (1), (kw: EXIT STATUS) 每一個命令都有一個退出狀態,用一個非負的整數表示 狀態碼0 表示命令運行沒有出錯 非零狀態碼表示命令出錯 狀態碼的範圍是0-255 命令的退出狀態常用於流程控制結構中的條件判斷2. 條件表達式 (2), (k

bash Shell 總結《四》 正則表達式

ja正則表達式單個字符表示法字符本身 <-- 除了下面的特殊字符之外,字符可以表示其本身. <-- Any character\d <-- Digit in 0123456789\D <--

bash shell 中時間操作常用方法總結

hour day 當前時間 簡單的 之前 nbsp seconds 獲取 相互   在日常的工作中,bash shell 的時間操作非常頻繁。比如shell腳本定時發送數據統計的時候,會查看當前是否為預定的發送時間。或者使用文件保存一些數據時,一般會生成時間字符串當做文

bash shell關聯陣列總結

 【原創】本博文為原創博文,引用或轉發請註明原始出處和連結:https://www.cnblogs.com/dingbj/p/dict_array.html  什麼是關聯陣列? 關聯陣列相對於索引陣列,又稱字典,這裡我就不給具體定義了,可以百度。 通過對比普通索引陣列,能夠快速理解運

bash 快捷鍵提示總結

ctrl鍵組合 ctrl+a:游標移到行首。 ctrl+b:游標左移一個字母 ctrl+c:殺死當前程序。 ctrl+d:退出當前 Shell。 ctrl+e:游標移到行尾。 ctrl+h:刪除游標前一個字元,同 backspace 鍵相同。 ctrl+k:清除游標後至行尾的內容。 ctrl+l:清屏,相當於

Git使用總結(包含Git Bash和Git GUI的使用)

Git總結 簡介 說明:下列文字性內容部分來自廖雪峰的網站,一部分來自公司實戰,一部分來自官方網站 版權宣告:本文為原創文章,未經允許不得轉載 部落格地址:http://blog.csdn.net/kevindgk

linux bash環境變數簡單總結

一.環境變數簡介 Linux是一個多使用者的作業系統。每個使用者登入系統後,都會有一個專用的執行環境。通常每個使用者預設的環境都  是相同的,這個預設環境實際上就是一組環境變數的定義。  環境變數是全域性的,設定好的環境變數可以被所有當前使用者所執行的程式所使用。  使用

bash shell 檔案語法解讀與總結

1. bash基本語法 下面看一個簡單的shell檔案(HelloWorld.sh): #!/bin/bash #This is an example echo Hello World (1)“#!”是

Bash百寶箱】Linux(Ubuntu-GNOME)桌面常用快捷方式總結

Ctrl + Q: 退出整個Nautilus視窗 Ctrl + W: 關閉當前Nautilus視窗的一個Tab Ctrl + N: 開啟一個新的Nautilus視窗 Ctrl + T: 在當前Nautilus視窗開啟一個新的Tab Ctrl + H: 切

Git使用總結(包含Git Bash和Git GUI的使用)(贊)

Git總結 簡介 說明:下列文字性內容部分來自廖雪峰的網站,一部分來自公司實戰,一部分來自官方網站  版權宣告:本文為原創文章,未經允許不得轉載  部落格地址:http://blog.csdn.net/kevindgk 學習網址 1. http://www.li

bash腳本測試總結

read nbsp 規範 條件表達式 space 模塊 你會 局限性 ech bash腳本測試總結 跟蹤腳本的執行 可以讓bash打印出你腳本執行的過程中的所有語句。這很簡單,只需要使用bash的-x選項就可以做到,下面讓我們來看一下。 下面的這段腳本

總結一下這幾節Java課的...重點!!!

nds test 性別 測試類 statement connect 姓名 oid nag 1.定義一個Person類,包含兩個私有的屬性(name、age)、一個含參的方法setValue(int age,String name)、一個不含參方法setValue()和一個普

設計模式學習總結(八)策略模式(Strategy)

isp 筆記本 override div ont 角色 write stat 通過   策略模式,主要是針對不同的情況采用不同的處理方式。如商場的打折季,不同種類的商品的打折幅度不一,所以針對不同的商品我們就要采用不同的計算方式即策略來進行處理。   一、示例展示:   以

設計模式學習總結(七)適配器模式(Adapter)

實現接口 國外 手機 額外 sed ges program ebe 通過   適配器模式主要是通過適配器來實現接口的統一,如要實現國內手機在國外充電,則需要在不同的國家采用不同的適配器來進行兼容!   一、示例展示:   以下例子主要通過給筆記本電腦添加類似手機打電話和發短

Sublime Text 3 快捷鍵總結

tex pack text 安裝 定位 pac 窗口 位置 默認 選擇類 Ctrl+D 選中光標所占的文本,繼續操作則會選中下一個相同的文本。 Alt+F3 選中文本按下快捷鍵,即可一次性選擇全部的相同文本進行同時編輯。舉個栗子:快速選中並更改所有相同的變量名、函數名等。