Shell學習之Shell特性 一

2022-04-04 05:51:36 字數 4577 閱讀 5151

這個不說了,我們在輸入命令的時候,按tab鍵補全。

history:歷史命令記錄

上下鍵:切換歷史命令

!number:執行對應number的歷史命令

!string:重新執行一遍含有string的最近的歷史命令

!$:!!:執行上一條命令

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 &

,生成乙個會話,可以一直使用

比如我們登陸到乙個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 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 dataecho命令:用來顯示文字行或變數取值,或者把字串輸入到檔案中。

格式: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 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

可以通過管道把乙個命令的輸出傳遞給另乙個命令做為輸入

格式:命令1 | 命令2

示例:cat test.txt | grep 'hello'

編寫shell指令碼,對檔案file1,file2,file3內容合併,並對每行進行編號。

指令碼:cat -n file1 file2 file3 > file4.txt

把輸出的乙個副本輸送到標準輸出,另乙個副本拷貝到相應的檔案中,如果想看到輸出的同時,把輸出也同時拷入乙個檔案,這個命令很合適。

格式: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呼叫shell

2008 05 06 14 43 18 分類 linux 標籤 字型大小 大中小訂閱 fork是最普通的,就是直接在指令碼裡面用 directory script.sh來呼叫script.sh這個指令碼.執行的時候開乙個sub shell執行呼叫的指令碼,sub shell執行的時候,parent ...

Shell程式設計 shell特性

linux會預設記錄1000條歷史記錄,可通過 echo histsize 檢視,如果講histsize更改為2000,那麼會預設儲存2000條。1000條記錄儲存在家目錄的 bash history 中,僅當使用者正常退出當前shell時,當前shell中執行的命令才會儲存到 bash histo...

Shell學習之shell語法

shell指令碼就是將完成乙個任務的所有的命令按照執行的先後順序,自上而下寫入到乙個文字檔案中,然後給予執行許可權。shell指令碼的命名 名字要有意義 不超過30個位元組 sh結尾 名字不要太長 區分大小寫 shell指令碼格式 shell指令碼開頭必須指定指令碼執行環境 以 這個特殊符號組合來組...