Linux Shell之一 Shell简介
??? 玩Linux不知道Shell,那就是不懂Linux。這句話足以見證shell在Linux運維中的地位。一直想好好寫下shell,但總是不知道如何寫起,不是因為Shell太難,而是因為她太龐大,也可能是因為自己shell能力上的不足,怕不能體系化地了解Shell,但是要開始的終究還是要開始,Come On!
什么是Shell
???? Shell是操作系統的最外層,Shell可以合并編程語言以控制進程和文件,以及啟動和控制其它程序。shell 通過提示您輸入,向操作系統解釋該輸入,然后處理來自操作系統的任何結果輸出來管理您與操作系統之間的交互。
?? ?Shell是一個用戶跟操作系統之間的一個命令解釋器。Shell是用戶與Linux操作系統之間溝通的橋梁。用戶可以輸入命令執行,又可以利用 Shell腳本編程去運行。
?? ?Shell本身是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋梁,用戶的大部分工作都是通過Shell完成的。
????Shell既是一種命令語言,又是一種程序設計語言。作為命令語言,它交互式地解釋和執行用戶輸入的命令;作為程序設計語言,它定義了各種變量和參數,并提供了許多在高級語言中才具有的控制結構,包括循環和分支。?? ?
Shell與編譯型語言的差異
編譯型語言
?? ?很多傳統的程序設計語言,例如Fortran、Ada、Pascal、C、C++和Java,都是編譯型語言。這類語言需要預先將我們寫好的源代碼(source code)轉換成目標代碼(object code),這個過程被稱作“編譯”。運行程序時,直接讀取目標代碼(object code)。由于編譯后的目標代碼(object code)非常接近計算機底層,因此執行效率很高,這是編譯型語言的優點。但是,由于編譯型語言多半運作于底層,所處理的是字節、整數、浮點數或是其他機器層級的對象,往往實現一個簡單的功能需要大量復雜的代碼。例如,在C++里,就很難進行“將一個目錄里所有的文件復制到另一個目錄中”之類的簡單操作。
解釋型語言
?? ?解釋型語言也被稱作“腳本語言”。執行這類程序時,解釋器(interpreter)需要讀取我們編寫的源代碼(source code),并將其轉換成目標代碼(object code),再由計算機運行。因為每次執行程序都多了編譯的過程,因此效率有所下降。
腳本編程語言的好處
????使用腳本編程語言的好處是,它們多半運行在比編譯型語言還高的層級,能夠輕易處理文件與目錄之類的對象;缺點是它們的效率通常不如編譯型語言。不過權衡之下,通常使用腳本編程還是值得的:花一個小時寫成的簡單腳本,同樣的功能用C或C++來編寫實現,可能需要兩天,而且一般來說,腳本執行的速度已經夠快了,快到足以讓人忽略它性能上的問題。腳本編程語言的例子有awk、Perl、Python、Ruby與Shell。
Shell有兩種執行命令的方式:
?? ?交互式(Interactive):解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。
?? ?批處理(Batch):用戶事先寫一個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一條地敲命令。
Linux Shell種類:
?? ?常見的有:Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)、Shell for Root(/sbin/sh)等。不同的Shell語言的語法有所不同,所以不能交換使用。
最常用的shell是Bash,也就是Bourne Again Shell,由于易用和免費,Bash在日常工作中被廣泛使用,也是大多數Linux系統默認的Shell。接下來我們來寫一個簡單的shell腳本。(shell腳本一般文件名以.sh結尾{非必須,但是很有必要},同時文件第一行定義該腳本為shell腳本)
注釋:
想很很多人學Shell都是從“世界,你好!”開始的,Me too!
Shell是用來執行的,所以要有執行(x)的權限,或者直接 bash first.sh 告訴系統,這就是一個腳本(無需執行權限)
第一行的#!/bin/bash是指定這個腳本要用哪種語言來解釋,除了第一行當"#"標識出哪種語言外,剩余的全部“#”后的都是注釋、說明。
一個好的Shell會標明日期、作者、版本、用途,這是一個良好的習慣,否則當我們寫數百行代碼的時候,隔個幾個月或幾年,怎么知道當初寫的是什么呢?
轉載于:https://blog.51cto.com/linuxnote/1639640
總結
以上是生活随笔為你收集整理的Linux Shell之一 Shell简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解WildFly8之Servlet容器
- 下一篇: C++返回引用的函数