1. 程式人生 > >Shell學習之Shell特性(一)

Shell學習之Shell特性(一)

結果 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特性(一)