Shell腳本——內置命令

一、內置命令

所謂 Shell 內置命令,就是由 Bash 自身提供的命令,而不是文件系統中的某個可執行文件。

例如,用于進入或者切換目錄的 cd 命令,雖然我們一直在使用它,但如果不加以注意很難意識到它與普通命令的性質是不一樣的:該命令并不是某個外部文件,只要在 Shell 中你就一定可以運行這個命令。

可以使用 type 來確定一個命令是否是內建命令:

[root@localhost ~]# type cd
cd is a Shell builtin
[root@localhost ~]# type ifconfig
ifconfig is /sbin/ifconfig

由此可見,cd 是一個 Shell 內建命令,而 ifconfig 是一個外部文件,它的位置是/sbin/ifconfig

還記得系統變量 PATH嗎?PATH嗎?PATHPATH 變量包含的目錄中幾乎聚集了系統中絕大多數的可執行命令,它們都是外部命令。

通常來說,內建命令會比外部命令執行得更快,執行外部命令時不但會觸發磁盤 I/O,還需要 fork 出一個單獨的進程來執行,執行完成后再退出。而執行內建命令相當于調用當前 Shell 進程的一個函數。

二、alisa命令

alisa 用來給命令創建一個別名。若直接輸入該命令且不帶任何參數,則列出當前 Shell 進程中使用了哪些別名。現在你應該能理解類似ll這樣的命令為什么與ls -l的效果是一樣的吧。

三、echo命令

echo 是一個 Shell 內建命令,用來在終端輸出字符串,并在最后默認加上換行符。

echo 命令輸出結束后默認會換行,如果不希望換行,可以加上-n參數

默認情況下,echo 不會解析以反斜杠\開頭的轉義字符。比如,\n表示換行,echo 默認會將它作為普通字符對待,我們可以添加-e參數來讓 echo 命令解析轉義字符

有了-e參數,我們也可以使用轉義字符\c來強制 echo 命令不換行了

四、read命令

read 是 Shell 內置命令,用來從標準輸入中讀取數據并賦值給變量。如果沒有進行重定向,默認就是從鍵盤讀取用戶輸入的數據;如果進行了重定向,那么可以從文件中讀取數據。

read 命令的用法為:

read [-options] [variables]

options表示選項,如下表所示;variables表示用來存儲數據的變量,可以有一個,也可以有多個。

optionsvariables都是可選的,如果沒有提供變量名,那么讀取的數據將存放到環境變量 REPLY 中。

選項說明
-a array把讀取的數據賦值給數組 array,從下標 0 開始。
-d delimiter用字符串 delimiter 指定讀取結束的位置,而不是一個換行符(讀取到的數據不包括 delimiter)。
-e在獲取用戶輸入的時候,對功能鍵進行編碼轉換,不會直接顯式功能鍵對應的字符。
-n num讀取 num 個字符,而不是整行字符。
-p prompt顯示提示信息,提示內容為 prompt。
-r原樣讀取(Raw mode),不把反斜杠字符解釋為轉義字符。
-s靜默模式(Silent mode),不會在屏幕上顯示輸入的字符。當輸入密碼和其它確認信息的時候,這是很有必要的。
-t seconds設置超時時間,單位為秒。如果用戶沒有在指定時間內輸入完成,那么 read 將會返回一個非 0 的退出

五、exit命令

exit 是一個 Shell 內置命令,用來退出當前 Shell 進程,并返回一個退出狀態;使用$?可以接收這個退出狀態;

exit 命令可以接受一個整數值作為參數,代表退出狀態。如果不指定,默認狀態值是 0。

一般情況下,退出狀態為 0 表示成功,退出狀態為非 0 表示執行失敗(出錯)了。

exit 退出狀態只能是一個介于 0~255 之間的整數,其中只有 0 表示成功,其它值都表示失敗。

Shell 進程執行出錯時,可以根據退出狀態來判斷具體出現了什么錯誤,比如打開一個文件時,我們可以指定 1 表示文件不存在,2 表示文件沒有讀取權限,3 表示文件類型不對。

六、下表列出了 Bash Shell 中直接可用的內建命令

命令說明
:擴展參數列表,執行重定向操作
.讀取并執行指定文件中的命令(在當前 shell 環境中)
alias為指定命令定義一個別名
bg將作業以后臺模式運行
bind將鍵盤序列綁定到一個 readline 函數或宏
break退出 for、while、select 或 until 循環
builtin執行指定的 shell 內建命令
caller返回活動子函數調用的上下文
cd將當前目錄切換為指定的目錄
command執行指定的命令,無需進行通常的 shell 查找
compgen為指定單詞生成可能的補全匹配
complete顯示指定的單詞是如何補全的
compopt修改指定單詞的補全選項
continue繼續執行 for、while、select 或 until 循環的下一次迭代
declare聲明一個變量或變量類型。
dirs顯示當前存儲目錄的列表
disown從進程作業表中刪除指定的作業
echo將指定字符串輸出到 STDOUT
enable啟用或禁用指定的內建shell命令
eval將指定的參數拼接成一個命令,然后執行該命令
exec用指定命令替換 shell 進程
exit強制 shell 以指定的退出狀態碼退出
export設置子 shell 進程可用的變量
fc從歷史記錄中選擇命令列表
fg將作業以前臺模式運行
getopts分析指定的位置參數
hash查找并記住指定命令的全路徑名
help顯示幫助文件
history顯示命令歷史記錄
jobs列出活動作業
kill向指定的進程 ID(PID) 發送一個系統信號
let計算一個數學表達式中的每個參數
local在函數中創建一個作用域受限的變量
logout退出登錄 shell
mapfile從 STDIN 讀取數據行,并將其加入索引數組
popd從目錄棧中刪除記錄
printf使用格式化字符串顯示文本
pushd向目錄棧添加一個目錄
pwd顯示當前工作目錄的路徑名
read從 STDIN 讀取一行數據并將其賦給一個變量
readarray從 STDIN 讀取數據行并將其放入索引數組
readonly從 STDIN 讀取一行數據并將其賦給一個不可修改的變量
return強制函數以某個值退出,這個值可以被調用腳本提取
set設置并顯示環境變量的值和 shell 屬性
shift將位置參數依次向下降一個位置
shopt打開/關閉控制 shell 可選行為的變量值
source讀取并執行指定文件中的命令(在當前 shell 環境中)
suspend暫停 Shell 的執行,直到收到一個 SIGCONT 信號
test基于指定條件返回退出狀態碼 0 或 1
times顯示累計的用戶和系統時間
trap如果收到了指定的系統信號,執行指定的命令
type顯示指定的單詞如果作為命令將會如何被解釋
typeset聲明一個變量或變量類型。
ulimit為系統用戶設置指定的資源的上限
umask為新建的文件和目錄設置默認權限
unalias刪除指定的別名
unset刪除指定的環境變量或 shell 屬性
wait等待指定的進程完成,并返回退出狀態碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535572.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell腳本——基礎語法

一、條件判斷 1.1、基本語法 [ condition ](注意condition前后要有空格) 注意:條件非空即為true,[ abcdef ]返回true,[] 返回false。 1.2、常用判斷條件 兩個整數之間比較 字符串比較 -lt 小于(less …

#2002 - 服務器沒有響應 (or the local MySQL server's socket is not ...

經常見有兄弟遇到這樣的問題: mysql -u root -p一切正常,但是用phpmyadmin卻死活不對,提示如下錯誤: #2002 - 服務器沒有響應 (or the local MySQL servers socket is not correctly configured) 我 google 了一下,發現…

第一個Scala程序——Hello World!

一、交互式編程 交互式編程不需要創建腳本文件,可以通過以下命令調用: $ scala Welcome to Scala 2.13.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_231). Type in expressions for evaluation. Or try :help.scala> println("Hello Wo…

CENTOS5下VSFTPD的設置

需求:(虛擬用戶分下載用戶/下載、上傳但不能刪除用戶/管理用戶) 一、安裝 yum -y install vsftpd* yum -y install pam* yum -y install db4* 二、系統帳戶 1、vsftpd服務的宿主用戶 useradd vsftpd -s /sbin/nologin 2、…

Scala基礎語法

如果你之前是一名 Java 程序員,并了解 Java 語言的基礎知識,那么你能很快學會 Scala 的基礎語法。 一、基本語法 Scala 基本語法需要注意以下幾點: 區分大小寫 - Scala是大小寫敏感的,這意味著標識Hello 和 hello在Scala中會有不…

DNS詳解

一、DNS 概念 人和人要互相識別和記憶,需要名字作為輔助,而對于網絡世界,在因特網內也需要一種命名系統來做類似的事情,該系統使用了域來劃分,任何一個網絡里的主機(或者路由器)都有獨一無二的域名(類似國家代碼),域又能繼續劃分為子域(類似每個國家有不同的省份代…

Shell腳本——函數

Shell 函數的本質是一段可以重復使用的腳本代碼,這段代碼被提前編寫好了,放在了指定的位置,使用時直接調取即可。 一、語法 Shell 函數定義的語法格式如下: function name() {statements[return value] }對各個部分的說明&#…

scala通過JDBC進行數據庫操作

scala通過JDBC方式操作mysql (需要加載 mysql-connector-java 驅動) maven依賴&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.45</version></dependency>一…

Linux下Java的安裝與配置

0、下載好JDK安裝包后上傳到Linux服務器的/usr/local/java/下 1、解壓tar -zxvf jdk-8u251-linux-x64.tar.gz 2、改名mv jdk1.8.0_251 jdk1.8 3、配置環境變量vi /etc/profile 添加以下內容 #JAVA export JAVA_HOME/usr/local/java/jdk1.8 export JRE_HOME$JAVA_HOME/jre e…

運維同步rsync

Rsync(remote rynchronization)是一款開源的、快速的、多功能的、可實現全量以及增量的本地或者遠程數據同步的備份的優秀工具&#xff0c;可使本地主機不同分區或目錄之間及本地和遠程兩臺主機之間的數據快速同步鏡像&#xff0c;遠程備份等功能同時它在同步文件的同時可以保…

Spark初識-什么是Spark

Spark是一個基于內存的開源計算框架&#xff0c;于2009年誕生于加州大學伯克利分校AMPLab&#xff08;AMP&#xff1a;Algorithms&#xff0c;Machines&#xff0c;People&#xff09;&#xff0c;它最初屬于伯克利大學的研究性項目&#xff0c;后來在2010年正式開源&#xff0…

系統優化

1、關閉selinux sed -i ‘s/SELINUXenforcing/SELINUXdisabled’ setenforce 0 2.精簡開機服務 ntsysv setup system service

Spark初識-Spark與Hadoop的比較

Spark&#xff0c;是分布式計算平臺&#xff0c;是一個用scala語言編寫的計算框架&#xff0c;基于內存的快速、通用、可擴展的大數據分析引擎 Hadoop&#xff0c;是分布式管理、存儲、計算的生態系統&#xff1b;包括HDFS&#xff08;存儲&#xff09;、MapReduce&#xff08;…

Spark初識-Spark基本架構概覽使用

當需要處理的數據量超過了單機尺度(比如我們的計算機有4GB的內存&#xff0c;而我們需要處理100GB以上的數據)這時我們可以選擇spark集群進行計算&#xff0c;有時我們可能需要處理的數據量并不大&#xff0c;但是計算很復雜&#xff0c;需要大量的時間&#xff0c;這時我們也可…

Spark初識-彈性分布式數據集RDD

Spark 的核心是建立在統一的抽象彈性分布式數據集&#xff08;Resiliennt Distributed Datasets&#xff0c;RDD&#xff09;之上的&#xff0c;這使得 Spark 的各個組件可以無縫地進行集成&#xff0c;能夠在同一個應用程序中完成大數據處理。 一、RDD概念 RDD 是 Spark 提供…

nmon

1).采集數據&#xff1a; #nmon -s10 -c60 -f -m /home/ 參數解釋&#xff1a; -s10 每 10 秒采集一次數據。 -c60 采集 60 次&#xff0c;即為采集十分鐘的數據。 -f 生成的數據文件名中包含文件創建的時間。 -m 生成的數據文件的存放目錄。 這樣就會生成一個 nmon 文件&…

Spark入門- Spark運行Local本地模式

一、Spark單機模式部署 Spark版本 &#xff1a; spark-2.4.7-bin-hadoop2.7 1、安裝配置JDK環境 2、下載Spark 官網下載http://spark.apache.org/ 然后上傳到LInux服務器上 3、解壓 tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz解壓目錄說明 bin 可執行腳本 conf …

Spark入門-了解Spark核心概念

在本文中我們將從Spark集群角度和程序應用的角度來對相關概念進行了解 一. 站在集群角度 1.1 Master Spark 特有資源調度系統的 Leader。掌管著整個集群的資源信息&#xff0c;類似于 Yarn 框架中的 ResourceManager&#xff0c;主要功能&#xff1a; 監聽 Worker&#xff0…

Spark運行standalone集群模式

spark的集群主要有三種運行模式standalone、yarn、mesos&#xff0c;其中常被使用的是standalone和yarn&#xff0c;本文了解一下什么是standalone運行模式&#xff0c;并嘗試搭建一個standalone集群 一、standalone模式 standalone模式&#xff0c;是spark自己實現的&#xf…

docker原理

a.更快速的支付和部署:開發者可以使用一個標準的鏡像來構建一套開發容器 ,開發完成之后,運維人員可以直接使用這個容器來部署代碼。 b.更高效的虛擬化: Docker容器的運行不需要額外的hypervisor支持,它是內核級的虛擬化,因此 可以實現更高的性能和效。 I 0c更輕松的遷移和擴展…