㈠ linux中shell分多少種,都有什麼區別
Shell是一種腳本語言,那麼,就必須有解釋器來執行這些腳本,常見的腳本解釋器有:
bash:是Linux標准默認的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。
sh: 由Steve Bourne開發,是Bourne Shell的縮寫,sh 是Unix 標准默認的shell。
另外還有:ash、 csh、 ksh等。
(1)linuxshbash擴展閱讀:
常見的編程語言分為兩類:一個是編譯型語言,如:c/c++/java等,它們遠行前全部一起要經過編譯器的編譯。另一個解釋型語言,執行時,需要使用解釋器一行一行地轉換為代碼,如:awk, perl, python與shell等。
Shell 經過了POSIX的標准化,所以它是可以在不同的linux系統上進行移植。
關於注釋的問題: 在shell中使用#進行注釋,注意,sh裡面沒有多行注釋,只能每一行加一個#號;
㈡ linux下的shell是什麼
什麼是shell
shell是用戶和Linux
操作系統
之間的
介面
。Linux中有多種shell,其中預設使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的
特性
。
什麼是shell
Linux系統的shell作為操作系統的
外殼
,為用戶提供使用操作系統的介面。它是
命令語言
、命令
解釋程序
及
程序設計語言
的統稱。
shell是用戶和
Linux內核
之間的介面
程序
,如果把Linux內核想像成一個
球體
的中心,shell就是圍繞
內核
的外層。當從shell或其他程序向Linux傳遞命令時,內核會做出相應的反應。
shell是一個命令語言
解釋器
,它擁有自己內建的shell命令集,shell也能被系統中其他
應用程序
所調用。用戶在提示符下輸入的命令都由shell先解釋然後傳給Linux核心。
Shell是一種具備
特殊功能
的程序,
它是介於使用者和
UNIX/linux
操作系統之核心
程序(kernel)間的一個介面。為什麼我們說
shell
是一種介於系統核心程序與使用者
間的中介者呢?讀過操作系統概論的讀者們都知道操作系統是一個
系統資源
的管理者與分
配者,當您有需求時,您得向系統提出;從操作系統的角度來看,它也必須防止使用者因
為錯誤的操作而造成系統的傷害?眾所周知,對
計算機
下命令得透過命令(command)
或
是程序(program);程序有編譯器(compiler)將程序轉為
二進制代碼
,可是命令呢?
其實shell
也是一支程序,它由
輸入設備
讀取命令,再將其轉為計算機可以了解的機械碼,
然後執行它。
各種操作系統都有它自己的
shell,以
DOS
為例,它的
shell
就是
command.com文
件。如同
DOS
下有
NDOS,4DOS,DRDOS
等不同的命令解譯程序可以取代標準的
command.com
,UNIX
下除了
Bourne
shell(/bin/sh)
外還有
C
shell(/bin/csh)、
Korn
shell(/bin/ksh)、Bourne
again
shell(/bin/bash)、Tenex
C
shell(tcsh)
等其它的
shell。UNIX/linux將
shell
獨立於核心程序之外,
使得它就如同一般的應用
程序,
可以在不影響操作系統本身的情況下進行修改、更新版本或是添加新的功能。
有一些命令,比如改變工作目錄命令cd,是包含在shell
內部
的。還有一些命令,例如
拷貝
命令cp和移動命令rm,是存在於
文件系統
中某個目錄下的單獨的程序。對用戶而言,不必關心一個命令是建立在shell內部還是一個單獨的程序。
shell首先檢查命令是否是
內部命令
,若不是再檢查是否是一個應用程序(這里的應用程序可以是Linux本身的
實用程序
,如ls和rm,也可以是購買的商業程序,如xv,或者是
自由軟體
,如emacs)。然後shell在搜索
路徑
里尋找這些應用程序(搜索路徑就是一個能找到可執行程序的目錄列表)。如果鍵入的命令不是一個內部命令並且在路徑里沒有找到這個
可執行文件
,將會顯示一條錯誤信息。如果能夠成功找到命令,該內部命令或應用程序將被分解為
系統調用
並傳給Linux內核。
shell的另一個重要特性是它自身就是一個解釋型的程序設計語言,shell程序設計語言支持絕大多數在
高級語言
中能見到的程序
元素
,如
函數
、
變數
、
數組
和程序控制結構。shell
編程語言
簡單易學,任何在提示符中能鍵入的命令都能放到一個可執行的shell程序中。
當普通用戶成功登錄,系統將執行一個稱為shell的程序。正是shell進程提供了命令行提示符。作為默認值(TurboLinux系統默認的shell是BASH),對普通用戶用「$」作提示符,對超級用戶(root)用「#」作提示符。
一旦出現了shell提示符,就可以鍵入
命令名稱
及命令所需要的
參數
。shell將執行這些命令。如果一條命令花費了很長的時間來運行,或者在屏幕上產生了大量的輸出,可以從
鍵盤
上按ctrl+c發出中斷
信號
來中斷它(在正常結束之前,中止它的執行)。
當用戶准備結束登錄對話進程時,可以鍵入logout命令、exit命令或文件結束符(EOF)(按ctrl+d實現),結束登錄。
㈢ Linux shell語言——dash和bash
自己寫的一個while循環結構總是報錯,糾結了一下午,各種查資料、改命令行,最後發現是ubuntu系統解釋器的原因,腳本沒有問題,換一下解釋器就OK了。鬱卒的要死……
什麼是bash ?
Bash(GNU Bourne-Again Shell)是許多Linux平台的內定Shell,事實上,還有許多傳統UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。
GNU/Linux 操作系統中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符號鏈接,但鑒於 bash 過於復雜,有人把 bash 從 NetBSD 移植到 Linux 並更名為 dash (Debian Almquist Shell),並建議將 /bin/sh 指向它,以獲得更快的腳本執行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX標准。
Debian和Ubuntu中,/bin/sh默認已經指向dash,這是一個不同於bash的shell,它主要是為了執行腳本而出現,而不是交互,它速度更快,但功能相比bash要少很多,語法嚴格遵守POSIX標准。
就是這個倒霉的dash解釋器使得我按照bash語法寫的shell 腳本不能運行。
要知道自己的/bin/sh指向何種解釋器,可以用 ls /bin/sh -al 命令查看:
$ ls /bin/sh -al
lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> bash
以上結果就表示當前系統用的是dash解釋器。
切換到bash的方式其實挺簡單的,關鍵是一直沒找出這個原因……
修改默認的sh,可以採用命令 sudo dpkg-reconfigure dash
會出現一個圖片狀的配置菜單,選no就可以了
再次檢查一下, ls /bin/sh -al 發現軟鏈接指向/bin/bash
lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> bash
參考資料: Ubuntu 的 bash和dash的區別_Linux教程_Linux公社-Linux系統門戶網站
感謝度娘!!
註:dash 和 bash 語法上的主要的區別有:
㈣ Linux中的sh命令的詳細解釋
linxu下的sh命令相當於是shell命令語言的解釋器。下面由我為大家整理了linux的sh命令的詳細解釋的相關知識,希望對大家有幫助!
一、Linux中的sh命令的詳細解釋
sh命令是shell命令語言解釋器,執行命令從標准輸入讀取或從一個文件中讀取。通過用戶輸入命令,和內核進行溝通!Bourne Again Shell (即bash)是自由軟體基金會(GNU)開發的一個Shell,它是Linux系統中一個默認的Shell。Bash不但與Bourne Shell兼容,還繼承了C Shell、Korn Shell等優點。
語法
bash [options] [file]
選項
-c string:命令從-c後的字元串讀取。
-i:實現腳本交互。
-n:進行shell腳本的語法檢查。
-x:實現shell腳本逐條語句的跟蹤。
二、Linux中的sh命令的具體例子
使用-x選項跟蹤腳本調試shell腳本,能列印出所執行的每一行命令以及當前狀態:
[root@AY1307311912260196fcZ satools]# sh -x check_ssh_login.sh
+ DEFINE=30
+ cat /var/log/secure
+ awk '/Failed/ {++ip[$(NF-3)]} END {for (i in ip) print i"="ip[i]}'
++ cat /root/satools/black.txt
+ for i in '`cat /root/satools/black.txt`'
++ echo 121.42.0.16=1427
++ awk -F= '{print $1}' + IP=121.42.0.16
++ echo 121.42.0.16=1427
++ awk -F= '{print $2}'
+ NUM=1427
+ '[' 1427 -gt 30 ']'
+ grep 121.42.0.16 /etc/hosts.deny
+ '[' 1 -gt 0 ']'
+ echo sshd:121.42.0.16
+ echo vsftpd:121.42.0.16
+ for i in '`cat /root/satools/black.txt`'
++ echo 121.42.0.72=276
++ awk -F= '{print $1}'
+ IP=121.42.0.72
++ awk -F= '{print $2}'
++ echo 121.42.0.72=276
+ NUM=276 + '[' 276 -gt 30 ']'
+ grep 121.42.0.72 /etc/hosts.deny
+ '[' 1 -gt 0 ']'
+ echo sshd:121.42.0.72
+ echo vsftpd:121.42.0.72
三、Linux中對.sh文件的操作命令
1、創建test.sh文件
touch test.sh
2、編輯sh文件
vi test.sh
3、保存退出
敲擊esc, 然後輸入 :wq ,回車退出
4、添加可執行許可權,當然默認就是可執行的。
chmod +x test.sh
5、運行文件
(1)./test.sh
(2)sh test.sh
6、刪除文件
rm test.sh
㈤ 10 分鍾學會Linux常用 bash命令
顯示所有的環境變數,如果你想獲取某個變數的詳細信息,使用 echo $VARIABLE_NAME .
Example:
whereis使用系統自動睜段構建的資料庫來搜索可執行文件,源文件和手冊頁面。
Example:
它在環境變數PATH指定的目錄中搜索可執行文件。此命令將列印可執行文件的完整路徑。兄岩
Example:
清除窗口上的內容。
列出您的文件。 ls 有很多選項: -l 列出「長格式」的文件,其中包含文件的確切大小,擁有該文件的人員,有權查看該文件,以及何時進行上次修改。 -a 列出所有文件,包括隱藏文件。有關此命令的更多信息,請檢查此鏈接。
Example:
創建或更新您的文件。
Example:
它可以在UNIX或Linux下用於以下目的。
顯示文件的第一部分(用空格移動並鍵入q以退出)。
輸出文件的前10行。
輸出最後10行文件。用於-f在文件增長時輸出附加數據。
將文件從一個位置移動到另一個位置。
filename1 文件的源路徑, filename2 是目標路徑。
將文件從一個位置復制到另一個位置。
filename1 文件的源路徑, filename2 是目標路徑。
刪除文件。在目錄上使用此命令會給您顯示一個錯誤: rm: directory: is a directory 。 為了刪除目錄,你必須傳遞 -rf 去遞歸刪除目錄中的所有內容。
比較文件,並列出他們的差異。
讓您更改文件的讀取,寫入和執行許可權。
壓縮文件。
解壓縮gzip壓縮的文件。
讓你查看gzip壓縮文件,而不需要gunzip它。
列印文件。
查看列印機隊列。
Example:
從列印隊列移除某些內容。
awk是處理文本文件最有用的命令。它一行一行地在整個文件上運行。默認情況下,它使用空格分隔欄位。awk命令最常用的語法是
讓我們採取以下文件 /etc/passwd 。以下是此文件包含的示例數據:
所以現在讓我們從這個文件只獲取用戶名。 -F 指定在我們要基於哪個分隔欄位。在我們的例子中 : 。 { print $1 } 意味著列印出第一個匹配欄位。
運行上述命令後,您將獲得以下輸出。
有關如何使用 awk 的更多細節,請查看以下鏈悉塵譽接。
查找文件內的文本。您可以使用grep搜索與一個或多個正則表達式匹配的文本行,並僅輸出匹配的行。
Example:
您還可以通過使用 -i 選項強制grep忽略單詞大小寫。 -r 可用於搜索指定目錄下的所有文件,例如:
-w 只搜索單詞。有關 grep 詳細信息,請查看以下鏈接。
告訴你一個文件中有多少行,多少單詞和多少字元。
Example:
7459 是行數, 15915 是單詞數, 398400 是字元數.
用於過濾和轉換文本的流編輯器。
example.txt
用連字元替換所有空格
使用"d"替換所有的數字
排序文本文件的行
example.txt
sort example.txt
隨機化一個排序的example.txt
報告或省略重復的行
example.txt
只顯示example.txt的唯一行(首先你需要排序,否則看不到重疊)
顯示每行的唯一項,並告訴我找到了多少個實例
從每行文件中刪除部分。
example.txt
顯示第2,7和9欄的空格作為分隔符
顯示一行文字
顯示 "Hello World"
用字母之間的換行顯示 "Hello World"
簡單的最佳文本格式化程序
example: example.txt (1 line)
將example.txt的行輸出為20個字元的寬度
翻譯或刪除字元
example.txt
把所有小寫字母變成為大寫
把所有的空格變成換行符
顯示文件的行數
example.txt
帶行號顯示 example.txt
列印匹配模式的行 - 擴展表達式(別名為:'grep -E')
example.txt
在其中顯示「Lorem」或「dolor」的行
列印匹配模式到的行 - FIXED模式匹配(別名為:'grep -F')
example.txt
在example.txt中找到具體的字元串'(Lorem | doloar)'
生成一個新的目錄。
執行這個,從一個目錄轉移到另外一個目錄。
將你移動到主目錄。此命令接受可選的 dirname ,將你移動到該目錄。
告訴你你目前所在的目錄。
ssh (SSH client) 是一個用來在登錄到遠程機器並執行的命令的程序。
此命令還接受 -p 可用於連接到特定埠的選項。
返回當前登錄用戶名。
允許當前登錄的用戶更改其密碼。
顯示您的磁碟配額。
顯示當前日期和時間。
顯示月份的日歷。
顯示當前的正常運行時間。
顯示誰在線
Displays information about user.
顯示內核信息。
顯示指定命令的手冊。
顯示磁碟使用情況。
顯示文件名中文件和目錄的磁碟使用情況( -s只給出一個總數)。
列出您最後登錄的指定用戶。
列出您的進程。
使用您所提供的ID殺死(結束)進程。
用名稱殺死所有進程。
顯示當前活動的進程。
列出停止的或後台工作的Job; 恢復在後台停止的Job。
前台化最近的Job。
Brings the most recent job in the foreground.
Pings主機並輸出結果。
獲取域的whois信息。
獲取域的DNS信息。
下載文件。
在本地主機和遠程主機之間或兩台遠程主機之間傳輸文件。
從本地主機復制到遠程主機
從遠程主機復制到本地主機
此命令還接受 -P 選項可用於連接到特定的埠。
在bash中你將編寫第一行腳本文件,被叫做 shebang 。任何腳本中的這一行來確定腳本的執行能力,如獨立的可執行文件,而不是在終端中預先鍵入sh,bash,python,php等。
Example:
上面的一行創建一個變數str並給它賦值「hello world」。通過 $ 放在變數名的開頭來檢索變數的值。
Example:
像其他語言一樣,bash也有數組。數組是包含多個值的變數。數組的大小沒有最大限制。bash中的數組為零。第一個元素被索引為元素0.在bash中創建數組有幾種方法。以下給出了哪些。
Examples:
要在特定索引處顯示值,請使用以下語法:
如果沒有提供索引,則假定為數組元素0。要了解數組中有多少值,請使用以下語法:
Bash也支持三元條件。下面是一些例子。
檢查一些關於如何操作字元串的語法
Example:
當您運行上述示例時,該hello函數將輸出「world!」。上述兩個功能 hello 和 say 是相同的。主要區別是功能 say 。此功能列印其接收到的第一個參數。函數內的參數以與給腳本的參數相同的方式進行處理。
bash中的條件語句與其他編程語言相似。條件有許多形式,如最基本的形式是 if 表達式 then 語句,其中語句只有在表達式為真時執行。
有時,如果條件變得混亂,所以你可以使用相同的條件 case statements 。
Expression Examples:
bash 中有三種不同類型的循環。 for , while 和 until .
for 語法:
while 語法:
until 語法:
bash_profile 可以通過運行後面的命令打開。 nano ~/.bash_profile
nano ~/.bashrc
source ~/.bashrc
cd hotellogs
您可以通過傳遞不同的選項來輕松地調試bash腳本bash。例如-n,不會運行命令並僅檢查語法錯誤。-vecho命令在運行它們之前。-x命令行處理後的echo命令。
㈥ 在linux下 什麼是bash.什麼又是shell
bash 是一個為GNU項目編寫的Unix shell,也就是linux用的shell。
Shell俗稱殼(用來區別於內核),是指「提供使用者使用界面」的軟體,就是一個命令行解釋器。
BASH是SHELL的一種,是大多數LINUX發行版默認的SHELL,除BASH SHELL外還有C SHELL等其它類型的SHELL。
linux主要特性:
1,基本思想:
Linux的基本思想有兩點:第一,一切都是文件;第二,每個軟體都有確定的用途。其中第一條詳細來講就是系統中的所有都歸結為一個文件,包括命令、硬體和軟體設備、操作系統、進程等等對於操作系統內核而言,都被視為擁有各自特性或類型的文件。至於說Linux是基於Unix的,很大程度上也是因為這兩者的基本思想十分相近。
2,完全免費:
Linux是一款免費的操作系統,用戶可以通過網路或其他途徑免費獲得,並可以任意修改其源代碼。這是其他的操作系統所做不到的。正是由於這一點,來自全世界的無數程序員參與了Linux的修改、編寫工作,程序員可以根據自己的興趣和靈感對其進行改變,這讓Linux吸收了無數程序員的精華,不斷壯大。
3,完全兼容POSIX1.0標准:
這使得可以在Linux下通過相應的模擬器運行常見的DOS、Windows的程序。這為用戶從Windows轉到Linux奠定了基礎。許多用戶在考慮使用Linux時,就想到以前在Windows下常見的程序是否能正常運行,這一點就消除了他們的疑慮。
4,多用戶、多任務:
Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。
5,良好的界面:
Linux同時具有字元界面和圖形界面。在字元界面用戶可以通過鍵盤輸入相應的指令來進行操作。它同時也提供了類似Windows圖形界面的X-Window系統,用戶可以使用滑鼠對其進行操作。在X-Window環境中就和在Windows中相似,可以說是一個Linux版的Windows。