Shell學習之Shell特性(一)
阿新 • • 發佈:2019-02-11
結果 unalias 占用 描述符 定義 mman and 對齊 行數
Shell學習之Shell特性
目錄
-
命令和文件自動補齊功能
-
命令歷史記憶功能 history、上下鍵、!number、!string、!$、!!
-
別名功能 alias、unalias cp、~username/.bashrc、\cp -rf /etc/hosts
-
快捷鍵 ^R ^D ^A ^E ^L ^U ^K ^S ^Q
-
前後臺作業控制
-
輸入輸出重定向
-
輸入與輸出
-
管道 | tee
-
命令排序
命令和文件自動補齊功能
這個不說了,我們在輸入命令的時候,按tab鍵補全。
命令歷史記憶功能 history、上下鍵、!number、!string、!$、!!
history:歷史命令記錄 上下鍵:切換歷史命令 !number:執行對應number的歷史命令 !string:重新執行一遍含有string的最近的歷史命令 !$: !!:執行上一條命令
別名功能 alias、unalias cp、~username/.bashrc、\cp -rf /etc/hosts
alias:查看臨時別名 alias 別名=‘命令‘:定義別名 unalias 別名:刪除別名 \命令 [選項] [參數]:跳過別名,如果這個命令定義了別名,但是你不想使用別名,可以這麽用
另外定義永久的別名: 超級用戶root的配置文件:.bashrc 普通用戶的配置文件:~username/.bashrc (前面這個符號代表家目錄)
快捷鍵
^R:搜索歷史命令,通過命令裏包含的字符 ^D:退出,相當於exit ^A:將光標移到最前面 ^E:將光標移到後面 ^L:刪除光標後面一個字符 ^U:刪除光標前面一個字符 ^K:截去光標後面的內容 ^S:鎖屏 ^Q:解屏
前後臺作業控制
&命令
註: 1.需要用戶交互的命令不要放在後臺執行,否則機器一直等待輸入 2.後臺程序在執行時,執行結果仍然會輸出到屏幕,幹擾我們的工作, 建議將這樣的信息重定向到某個文件 3.在命令後面加上&可以將命令放到後臺執行,如果退出終端,則無效,只在本次會話有效
將這段代碼放到後臺執行,直接在後面加&。
sleep 300 & 如果讓這個命令能在下次登陸也能生效,怎麽解決? 在命令前面加上nohup nohup sleep 6000 &
screen命令
,生成一個會話,可以一直使用 比如我們登陸到一個linux系統,先生成一個會話,不會影響你現在的工作,你該幹什麽幹什麽,會記錄所有當前會話內容,下次登陸,可以切換到你上次工作的會話下。 screen:生成一個會話 screen -s [會話名]:生成一個命名的會話 screen -list:查看所有會話 screen -r [number]:切換會話
輔助命令
我們知道當有任務在前臺工作時,任務會占用終端,你此時不能在終端工作,除非你再開啟一個終端 ^C:殺掉正在運行的前臺任務 ^Z:將正在運行的前臺任務暫停到後臺 bg:讓任務在後臺工作,bg [number] fg:讓任務回到前臺工作,fg [number] kill number:給pid為number的進程發信息 kill %[number]:給當前shell中作業號為number的發信息 ps: 列出系統中正在運行的進程 jobs:查看當前有多少在後臺運行的命令
輸入輸出重定向
當我們在shell中執行命令的時候,每個進程都和三個打開的文件相聯系,並使用文件描述符來引用這些文件:
系統中實際上有12個描述符,可以任意使用文件描述符3-9 標準輸入 對應文件描述符0,是命令的輸入,默認是鍵盤 標準輸出 對應文件描述符1,是命令的輸出,默認是終端 標準錯誤 對應文件描述符2,是命令錯誤的輸出,默認是終端
利用文件重定向功能對命令的標準輸入,輸出和錯誤進行修改: 常用文件重定向命令: command >file: 標準輸出重定向到一個文件,錯誤仍然輸出屏幕 command >>file: 標準輸出重定向到一個文件(追加) command 1>file1: 標準輸出重定向到一個文件 command 2>>file2: 標準錯誤重定向到一個文件(追加) command 1>file 2>&1: 標準輸出和標準錯誤一起重定向到一個文件 command 1>>file 2>&1: 標準輸出和標準錯誤一起重定向到一個文件(追加) command < file1 >file2:以file1做為標準輸入,file2做為標準輸出 command <file: 以file做為文件標準輸入 註:上面的command>file 2>&1 可以修改為command>file 2>>file
例子
重定向標準輸出: 例: ls –l >>myfile.out 重定向標準輸入: 例: sort < name.txt > name.out 從name.txt讀入數據進行排序,然後將排序結果輸出到文件name.out中 重定向標準錯誤 例: ls ddd 2> /dev/null ddd不存在,標準錯誤信息會輸送到系統垃圾箱,而不會輸送到屏幕如果標準錯誤信息有用,可以將其存放到錯誤文件中 使用文件重定向功能將MySQL-client-5.0.16-0.i386.rpm的包說明信息追加到 mysql_install.log 文件中。 rpm -qi MySQL-client-5.0.16-0.i386.rpm >>mysql_install.log 使用文件重定向功能將ls ddd的錯誤信息保存在錯誤日誌error.log文件中, 說明:ddd 目錄並不存在。 ls ddd 2>error.log 編寫腳本,實現功能:讀取文件myfile中一行數據,並通過echo打印出來 #!/bin/bash read data </root/myfile echo $data
輸入和輸出
輸出echo
echo命令:用來顯示文本行或變量取值,或者把字符串輸入到文件中。 格式:echo string echo的常用功能:\c不換行 \f不進紙 \t跳格 \n換行 註意: 對於linux系統,必須使用-e選項來使以上轉義符生效 例:$echo -e "hello\tboy" $hello boy echo命令對特殊字符敏感,如果要輸出特殊字符,需要用\屏蔽特殊含義 常用的特殊字符:雙引號"" 例:$echo "\"\"" $""
例子
編寫shell腳本,借助echo命令分別輸出系統中SHELL,PATH變量的取值 腳本: echo $SHELL,$PATH 編寫shell腳本,使用一個echo命令輸出如下格式的內容(註意對齊格式): id name msg 01 mike "hello" 02 john "hi" 腳本: echo -e "id\tname\tmsg\n01\tmike\t\"hello\"\n02\tjohn\t\"hi\""
輸入read
從鍵盤或者文件的某一行文本讀入信息,並將其賦給一個變量。 格式:read var1 var2 ...
註意:如果輸入的值個數多於變量的個數,多余的值會賦給最後一個變量。
例子
編寫shell腳本,實現功能:接收用戶輸入的值,並顯示在屏幕。 腳本: #!/bin/bash read name echo $name 編寫shell腳本,使用read命令讀取user和password變量 第一次:輸入 mike 1234567 第二次:輸入 mike 第三次:輸入mike john 123456 分別使用echo命令查看user,password的取值,比較有何不同? 腳本: #!/bin/bash read user password echo $user $password
管道 | tee
管道
可以通過管道把一個命令的輸出傳遞給另一個命令做為輸入 格式:命令1 | 命令2 示例:cat test.txt | grep ‘hello‘
例子
編寫shell腳本,對文件file1,file2,file3內容合並,並對每行進行編號。 腳本: cat -n file1 file2 file3 > file4.txt
tee命令
把輸出的一個副本輸送到標準輸出,另一個副本拷貝到相應的文件中,如果想看到輸出的同時,把輸出也同時拷入一個文件,這個命令很合適。 格式:tee -a file -a 表示文件追加到末尾 file 表示保存輸出信息的文件 tee命令一般和管道符 | 結合起來使用 例子:who | tee who.info 該命令的信息返回在屏幕上,同時保存在文件who.info中
例子
1.使用tee命令將當前系統中所有進程信息保存到文件pid_info中 腳本: #!/bin/bash top | tee pid_info 2.使用tee命令和who命令將當前系統中登陸的終端信息追加到文件login_info中 腳本: #!/bin/bash who | tee -a login_info
命令排序
如果你想在執行多個命令,可以使用下面三種分隔符 ; && || ; 不具備邏輯判斷,不關心前面的命令是否執行成功,後面的命令怎樣都會執行 示例:cd;cat file && 具備邏輯判斷,前面的命令執行成功,後面的命令才能執行 || 具備邏輯判斷,前面的命令執行不成功,後面的命令才能執行
Shell學習之Shell特性(一)