生活随笔
收集整理的這篇文章主要介紹了
bash特性以及shell脚本简介
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
bash的特性之多命令執(zhí)行的邏輯關(guān)系:
1.命令替換
COMMAND1 $(COMMAND2)
2.管道
COMMAND1 | COMMAND2 | COMMAND3 ...
3.順序執(zhí)行結(jié)構(gòu)
COMMAND1 ; COMMAND2 ; COMMAND3 ...
4.選擇執(zhí)行結(jié)構(gòu):
如果...那么...
要么...要么...
邏輯運(yùn)算:
與:邏輯乘法,1--真,0--假,&&,雙目操作符
1 && 1 = 1
1 && 0 = 0
0 && 1 = 0
0 && 0 = 0
"與"運(yùn)算的短路運(yùn)算法則:只要第一個(gè)操作數(shù)為false,則其邏輯運(yùn)算結(jié)果一定為false;或:邏輯加法,1--真,0--假,||,雙目操作符1 || 1 = 11 || 0 = 10 || 1 = 10 || 0 = 0"或"運(yùn)算的短路運(yùn)算法則:只要第一個(gè)操作數(shù)為true,則其邏輯運(yùn)算結(jié)果一定為true;非:邏輯取反,1--真,0--假,!,單目操作符!0 = 1!1 = 0命令的執(zhí)行狀態(tài)返回值:SUCCESS:0--TURE(true)FAILURE:1-255--FALSE(false)COMMAND1 && COMMAND2表示:1.如果COMMAND1能夠成功執(zhí)行,那么將會(huì)執(zhí)行COMMAND2;2.如果COMMAND1執(zhí)行失敗,那么COMMAND2將不會(huì)被執(zhí)行;COMMAND1 || COMMAND2表示:1.只有COMMAND1執(zhí)行失敗,COMMAND2才會(huì)被執(zhí)行;2.如果COMMAND1執(zhí)行成功,那么COMMAND2就不會(huì)被執(zhí)行;!COMMADN1 && COMMAND2 相當(dāng)于 COMMAND1 || COMMAND2!COMMAND1 || COMMAND2 相當(dāng)于 COMMAND1 && COMMAND2德·摩根定律!(COMMAND1 && COMMAND2) || COMMAND3!(COMMAND1 || COMMAND2) && COMMAND3!A && B = A || B!A || B = A && B!(A && B) = !A || !B!(A || B) = !A && !B三種邏輯運(yùn)算的優(yōu)先級(jí):!>&&>||示例:如果用戶user4存在并且其家目錄也存在,那么就執(zhí)行userdel -r user4命令;id user4 && ls -d /home/user4 && userdel -r user4
bash腳本編程:
什么叫編程?
使用人類自然語(yǔ)言或機(jī)器語(yǔ)言進(jìn)行程序源代碼書(shū)寫(xiě)的過(guò)程。
為什么要編程?為了能夠讓用戶在使用計(jì)算機(jī)的時(shí)候,可以讓計(jì)算機(jī)以非交互的方式完成某些任務(wù);此時(shí),用戶需要將此類任務(wù)編輯稱為一個(gè)文件,并且讓計(jì)算機(jī)按照特定書(shū)序進(jìn)行任務(wù)讀取,從而實(shí)現(xiàn)預(yù)期的功能;為了讓計(jì)算機(jī)能夠解讀此類文件的內(nèi)容并正確的予以執(zhí)行,必須將程序源代碼文件轉(zhuǎn)換為計(jì)算機(jī)可以直接識(shí)別并使用的二進(jìn)制格式,此轉(zhuǎn)換過(guò)程稱為編譯;而想要完成編譯過(guò)程,必須使用特定的編譯器工具;因此,無(wú)論使用何種編程語(yǔ)言進(jìn)行程序編寫(xiě),都必須嚴(yán)格按照編譯器所能夠識(shí)別的特定格式和語(yǔ)法結(jié)構(gòu)進(jìn)行程序編寫(xiě);編程語(yǔ)言:高級(jí)語(yǔ)言:根據(jù)源代碼的處理方式分類:編譯型語(yǔ)言:源代碼 --> 編譯器(編譯) --> [鏈接器(鏈接) --> ] 匯編器(匯編) --> 可以執(zhí)行的二進(jìn)制代碼文件;解釋型語(yǔ)言源代碼 --> 解釋器(逐行解釋) --> 邊解釋邊執(zhí)行根據(jù)編程過(guò)程中的功能實(shí)現(xiàn)是調(diào)用庫(kù)還是調(diào)用外部程序文件分類:完整編程語(yǔ)言:利用庫(kù)或編程組件進(jìn)行編程;腳本編程語(yǔ)言:利用解釋器調(diào)用被選擇的外部應(yīng)用程序;根據(jù)程序的編寫(xiě)規(guī)范分類:過(guò)程式語(yǔ)言:程序 = 指令 + 數(shù)據(jù)以指令為中心,圍繞指令的功能實(shí)現(xiàn)設(shè)計(jì)數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)為指令服務(wù);算法和指令的實(shí)現(xiàn)形式:順序執(zhí)行選擇執(zhí)行循環(huán)執(zhí)行面向?qū)ο笳Z(yǔ)言:程序 = 算法 + 數(shù)據(jù)結(jié)構(gòu)以數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)為中心,將數(shù)據(jù)實(shí)例化,圍繞數(shù)據(jù)的需求來(lái)部署算法;類(Class):被實(shí)例化的數(shù)據(jù);屬性(attibution):同一類中的不同對(duì)象的區(qū)分依據(jù);方法(method):類的正確的操作方法;低級(jí)語(yǔ)言:匯編語(yǔ)言:機(jī)器語(yǔ)言:二進(jìn)制語(yǔ)言shell腳本編程——bash腳本編程:過(guò)程式編程語(yǔ)言,解釋運(yùn)行的編程語(yǔ)言,腳本類語(yǔ)言(依靠外部應(yīng)用程序文件運(yùn)行)shell腳本到底是什么?1.純文本文檔——文件中所有存儲(chǔ)或包含的指令+數(shù)據(jù)都是以字符為單位進(jìn)行存儲(chǔ)的;2.根據(jù)用戶的需求來(lái)解決用戶問(wèn)題的簡(jiǎn)單或復(fù)雜的命令組合體;3.是一種具有"執(zhí)行冪等性"的程序?qū)嶓w;執(zhí)行冪等性:任何命令的一次執(zhí)行結(jié)果和多次執(zhí)行結(jié)果是一致的;注意:很多命令都不具備"執(zhí)行冪等性",因此在shell腳本中需要使用大量的程序邏輯來(lái)判斷某個(gè)命令是否符合其運(yùn)行條件,從而避免在運(yùn)行過(guò)程中出現(xiàn)的嚴(yán)重錯(cuò)誤;shell腳本中的代碼內(nèi)容如何書(shū)寫(xiě)?1.首行必須是shebang,即:解釋器程序的絕對(duì)路徑,必須占據(jù)絕對(duì)行首且必須單獨(dú)占據(jù)第一行;在執(zhí)行腳本時(shí),會(huì)根據(jù)shebang的指示,啟動(dòng)相應(yīng)的解釋器以解釋腳本被諸多的命令;#!/bin/bash#!/bin/sh#!/usr/bin/python#!/usr/bin/perl...2.在shell腳本中,除了shebang之外,所有行首為#字符的行,均被解釋為注釋行;即:解釋器只會(huì)解釋其內(nèi)容,但并不予以執(zhí)行;3.解釋器會(huì)忽略腳本文件中所有的空白行;空白行指的是:在一行文本中,除了空白字符,空格字符,制表字符之外不具備其他任何類型字符的行;4.大量的命令和關(guān)鍵字命令:內(nèi)部或外部應(yīng)用程序關(guān)鍵字:內(nèi)置于shell,只能在某種特定結(jié)構(gòu)體中執(zhí)行的命令;keyword;如:if, else, then, do, while, for, select, until, case, fi, esac,...5.shell中的所有的特殊功能字符;注意:所有被編寫(xiě)進(jìn)shell腳本文檔的命令、關(guān)鍵字及符號(hào)必須是ASCII編碼格式的字符,其他編碼格式的字符可以出現(xiàn)在shell腳本文件中,但不具有任何特殊含義;如何編寫(xiě)shell腳本?可以利用所有的文本文檔編輯工具進(jìn)行shell腳本編寫(xiě),如:nano, vi, vim, pico, emacs, ...通常在Linux的各發(fā)行版本中,推薦使用vim;腳本文件的命名方式:一般情況下,會(huì)為腳本設(shè)置".sh"的名稱后綴;較低版本的編輯工具,會(huì)根據(jù)文件的后綴名稱來(lái)識(shí)別是否為shell腳本文件;交高版本的文本編輯工具,如vim7,無(wú)需過(guò)多的關(guān)系文件后綴名的問(wèn)題。腳本的運(yùn)行方式:1.為腳本文件賦予執(zhí)行權(quán)限,可以直接以絕對(duì)路徑或相對(duì)路徑的方式運(yùn)行此文件;# chmod +x /PATH/TO/SOME_SCRIPT_FILE# /PATH/TO/SOME_SCRIPT_FILE注意:如果腳本文件所在目錄路徑存儲(chǔ)于PATH變量中,則直接以腳本文件名來(lái)執(zhí)行即可;2.直接使用解釋器運(yùn)行腳本,將腳本文件作為解釋器程序的參數(shù);# bash /PATH/TO/SOME_SCRIPT_FILEbash命令的常用選項(xiàng):-x:使bash在解釋腳本的過(guò)程展示在標(biāo)準(zhǔn)輸出上;一般用于為shell腳本排錯(cuò)-n:對(duì)腳本文件進(jìn)行預(yù)執(zhí)行,以分析腳本中是否存在語(yǔ)法類錯(cuò)誤;如果沒(méi)有錯(cuò)誤,則不輸出任何信息;相反,則輸出簡(jiǎn)潔的提示信息;具體的錯(cuò)誤定位需要自行判斷;注意:此種方式中,腳本文件是否有執(zhí)行權(quán)限并不是很重要的屬性;注意:以上兩種方式,在執(zhí)行腳本時(shí),會(huì)在當(dāng)前shell中開(kāi)啟一個(gè)新的子shell以運(yùn)行腳本;一般情況下,當(dāng)腳本運(yùn)行結(jié)束,該子shell也會(huì)被隨之銷毀;因此,所有在腳本中定義的變量,在腳本的末尾處,最好將其明確的撤銷;3.使用source命令運(yùn)行腳本;# source /PATH/TO/SOME_SCRIPT_FILE# . /PATH/TO/SOME_SCRIPT_FILE注意:1.source命令不會(huì)在運(yùn)行腳本時(shí)開(kāi)啟子shell,而是在當(dāng)前shell中運(yùn)行;2.使用source命令執(zhí)行的腳本中不要包括諸如exit類的命令;
轉(zhuǎn)載于:https://blog.51cto.com/13487800/2129799
總結(jié)
以上是生活随笔為你收集整理的bash特性以及shell脚本简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。