❶ linux Shell腳本的執行過程
用戶登錄時,將會取得一個 bash ,這個 bash 在系統中有一個全局唯一的ID,也就是進程的ID,使用命令 ps -ef 並配合 grep 來查看進程ID。 ps -ef|grep bash ,此命令還能查看進程對應的父進程ID,系統中所有進程的祖先進程都是INIT進程(進程ID=1),它是最先啟動運行的。
回到 bash 進程,也就是我們的命令行界面,進程的執行都有其附屬的執行環境,環境變數就屬於其中之一。並且環境變數是可以完全被子進程繼承的,也就是說,子進程可以使用父進程的環境變數,但是不能使用父進程的自定義變數。
簡而言之: 子進程繼承父進程的環境變數,不繼承父進程的自定義變數。
shell腳本有4種執行方式,不同的執行方式可能導致結果不一致
四種方式的執行結果如下:
❷ linux怎樣一次運行多個shell腳本
inux 下shell腳本執行多個命令的方法x0dx0a1.每個命令之間用;隔開x0dx0a說明:各命令的執行給果,不會影響其它命令的執行。換句話說,各個命令都會執行,但不保證每個命令都執行成功。x0dx0a2.每個命令之間用&&隔開x0dx0a說明:若前面的命令執行成功,才會去執行後面的命令。這樣可以保證所有的命令執行完畢後,執行過程都是成功的。x0dx0a3.每個命令之間用||隔開x0dx0a說明:||是或的意思,只有前面的命令執行失敗後才去執行下一條命令,直到執行成功一條命令為止
❸ Linux相關使用介紹
Linux命令分為內部命令(shell自帶的命令)和外部命令(不是shell自帶的命令,由用戶安裝),怎麼鑒別是內部命令和外部命令呢?可以通過type命令來鑒別
什麼是shell呢?shell是一個程序,常用的有bash shell,平時我們通過用戶名和密碼登錄到linux,其實就是登錄到bash shell程序,通過bash shell來操作linux內核
命令執行流程
那豈不是說使用外部命令效率會很慢嗎?
其實一點都不慢,它會去PATH環境變數設置的一堆目錄中查找
cd is a shell builtin 表示內部命令
ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令
cd命令切換文件夾
現在我們cd /usr/sbin
通過cat命令查看文件內容
通過cat ifconfig來查看ifconfig,發現是亂碼文件
file命令查看文件類型
輸入file ifconfig
從輸出信息可以看出它是一個二進制可執行文件
whereis命令查看文件位置
find / -name jdk
echo命令用戶列印信息,相當於java中的system.out.println
可以使用回車查看下一行、空格查看下一頁、q退出
一般使用man查看外部命令,help查看內部命令
查看linux下的應用和應用的進程號
當我們在這個窗口中輸入kill -9 1593的話,另外一個正在編輯文件的進程就會退出
在前面我們已經講過,bash shell程序在執行命令的一個過程及原理,對於外部命令,它會去PATH這個環境變數中查找執行命令所在的路徑,當然在去PATH中尋找之前會先去hash表中查找這個命令有沒有執行過,執行過的話會記錄在hash表中,則此次查找只需從hash表中就可以很方便的找到
查看分區信息 -h 表示文件大小後面會顯示文件大小
查看文件的使用情況
使用man ls 查看ls命令的相關介紹
-a:可以查看隱藏文件
-l:以長列表的形式展示文件列表信息
第一位 -:表示文件,d表示文件夾,b表示塊設備文件,c表示字元設備文件,p表示命令管道文件,s表示套接字文件, 從第二位開始往後數九位表示屬主許可權(每三位一組 rwx:讀、寫、執行),第11位表示的點表示分隔符,點後面的數字表示文件有幾個硬連接,第一個root代表屬主名,第二個root代表這個第一個root所在的組織,接下來的5表示文件大小,5後面的日期表示文件最後一次修改的時間, 1.txt代表的文件或文件夾的名稱
小結:
切換文件目錄
cd 文件路徑
cd:切換到家目錄
cd ~:回到家目錄(也就是家目錄)
cd ..:回到上一級目錄
創建目錄
mkdir 目錄名
mkdir -p 目錄名,級聯創建目錄
cp 被拷貝的文件(可以是路徑加文件名) 拷貝到哪個位置
復制目錄使用
cp -r 被拷貝的目錄 目標位置
移動命令
mv 被移動的文件 目標位置+目標文件名
rm 文件名(此中方式的刪除需要再輸入 yes)
rm -f 文件名,無提示直接刪除
rm -rf 文件夾
ln命令默認創建的是硬連接
ln profile a:將a硬連接到profile文件上,他們底層共用一個文件,刪除他們之中任何一個
對另外一個沒有影響,同時你也可以使用 ll -i命令查看文件編號
ln -s profile a:將a軟連接到profile文件,當你訪問a的時候會去訪問profile,profile再訪問底層文件,當將profile刪除了之後a就無法訪問了
一致時間、創建新文本
touch 已存在的文件:會將文件的訪問時間、更新時間、改變時間(即上面stat中介紹的三個時間)變成一致
touch 不存在的文件:會創建一個新的文本
cat命令查看文件內容
cat 1.txt:查看單個文件內容
cat 1.txt 2.txt:查看多個文件
more 1.txt:以分頁的形式查看文件內容,按空格:下一頁,回車:下一行(注意它不能回看,回看的話只能用滑鼠回輪)
less 1.txt:使用空格下一頁, b看上一頁, 回車看下一行
注意less的話會把整個文件內容載入到內存,如果文件比較大的話,建議使用more命令查看
head命令默認查看文件前10行內容, head 1.txt
head -5 1.txt:查看文件前5行的內容
tail命令默認查看文件後10行的內容 tail 1.txt
tail -5 1.txt:查看文件後5行內容
tail -f 1.txt:實時查看文件增量內容
cat b.txt | head -3:管道左邊的命令會以輸出流的形式交給管道右邊的命令,管道右邊以輸入流的形式接收並且拼到命令的右邊
注意:ls -l 不能接受前面的輸出流,這個怎麼辦呢?可以通過xargs命令
vi文本編輯器末行模式的操作
set nu(number的縮寫): 設置行號
set nonu(nonumber的縮寫):取消行號
set readonly:設置為只讀
n:往下查找
N:往上查找
n:往上查找
N:往下查找
一般我們會在/etc/profile文件中設置一些環境變數,但是在設置的時候可能沒有記住目錄,這時候我們可以使用如下方式
效果
格式 :s/str1/str2/gi
/ : 臨近s命令的第一個字元邊界字元,也可以是 @或#
g : 一行內全部替換
i : 忽略大小寫
范圍
n:行號
. :當前游標行
+n :偏移n行
-3
%:全文
全部刪除 1,$d
刪除前三行
刪除倒數第2行
游標挪到最後一行 按下小寫的p
效果圖
正則表達式是對字元串操作的一種邏輯公式,就是用事先定義好的一些特殊字元、及這些特定字元的組合組成一個"規則字元串",這個"規則字元串"用來表達對字元串的一種過濾邏輯。
\ :轉義字元
. :匹配任意單個字元
[1249a] :匹配中括弧中任意字元
[^12] :匹配中括弧中任意非1和2的字元
[a-k] :匹配中括弧中任意a~k中的一個字元
^ :行首
$ :行尾
<abc> :單詞首尾邊界(匹配單詞abc)
| :連接操作符
(,) : 選擇操作符
\n :反向引用
? :匹配0到1次
在Linux中通過grep命令使用正則表達式來匹配信息
f :選擇顯示的列
s :不顯示沒有分隔符的行
d :自定義分隔符
n :按數值排序
r :倒序
t :自定義分隔符
K :選擇排序列
u :合並相同行
f :忽略大小寫
sed:行編輯器,以行為單位進行處理,可以將數據進行替換、刪除、新增、選取等特定工作
sed [options] 'Command' file ...
-n :靜默模式,不再默認顯示模式空間(內存)中的內容
-i :直接修改原文件
-e SCRIPT :可以同時執行多個腳本
-f /PATH/TO/SED_SCRIPT
-r :表示使用擴展正則表達式
d :刪除符合條件的行
p :顯示符號條件的行
a \string :在指定的行後面追加新行,內容為string
\n :可以用於換行
i \string :在指定的行前面添加新行,內容為string
c :取代,c的後面可以接字元串
s /pattern/string/修飾符:查找並替換。默認只替換每行中第一次被模式匹配到的字元串
g :行內全局替換
i :忽略字元大小寫
s///:s###,s@@@
(),\1,\2
sed "2p" ctxt
但是在執行下面的操作的時候文本中的內容都顯示出來了,它的原理是,列印匹配的行,以及文本中所有的內容
注意:它刪的是內存中的數據,而不是目標文件
sed -i "3d" ctxt
它的原理是先把內存中的第3行數據刪除,然後再把內存中的數據寫回原文件,這時原文件中的第三行就沒有了
使用變數的形式
awk是一個強大的文本分析工具。
相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤為強大。
簡單來說awk就是把文件逐行的讀入,(空格,製表符)為默認分隔符將每行切片,切開的部分再進行各種分析處理。
awk -F '{pattern + action}' {filenames}
支持自定義分隔符,默認是以空格分隔的
支持正則表達式匹配
支持自定義變數,數組 a[1] a[tom] map(key)
支持內置變數
ARGC 命令行參數個數
ARGV 命令行參數排列
ENVIRON 支持隊列中系統環境變數的使用
FILENAME awk瀏覽的文件名
FNR 瀏覽文件的記錄數
FS 設置輸入域分隔符,等價於命令行 -F選項
NF 瀏覽記錄的域的個數
NR 已讀的記錄數
OFS 輸出域分隔符
ORS 輸出記錄分隔符
RS 控制記錄分隔符
支持函數
print、split、substr、sub、gsub
支持流程式控制制語句
if、while、do/while、for、break、continue
練習題
passwd文件內容解讀:
passwd文件中每行由7個欄位組成,欄位與欄位之間由:分隔,第一個欄位代表用戶名,第二個欄位表示用戶對應的加密後的密碼,第三個欄位表示userId,第四個欄位表示groupId,第五個欄位表示對用戶的描述,第六個欄位表示用戶的家目錄,第七個欄位表示的是這個用戶默認使用的shell
其中$0表示整行
統計報表:合計每人1月工資, 0:manager,1:worker
將awk後面的內容封裝到一個文件中(封裝的腳本要遵循一定的格式)
qqq文件的內容格式
❹ linuxshell 腳本執行的過程是怎樣的
Linux下可以有兩種方式執行Shell腳本:
1、用shell程序執行腳本:根據shell腳本的類型,選擇shell程序,常用的有sh,bash,tcsh等(一般來說第一行#!/bin/bash裡面指明了shell類型的,比如#!/bin/bash指明是bash,#!/bin/sh則是sh);然後輸入命令(其中bash為shell的名稱,myshell.sh則為要執行的代碼):
bash myshell.sh
2、直接執行腳本:
不過首先的加上可執行許可權(也許要root許可權,4情況而定),執行:
chmod +x myshell.sh
然後執行:
./myshell.sh
就可以執行了。
❺ 什麼是Shell,Shell命令的兩種執行方式
Shell本身是一個用C語言編寫的程序,它是用戶使用Unix/Linux的橋梁,用戶的大部分工作都是通過Shell完成的。Shell既是一種命令語言,又是一種程序設計語言。作為命令語言,它互動式地解釋和執行用戶輸入的命令;作為程序設計語言,它定義了各種變數和參數,並提供了許多在高級語言中才具有的控制結構,包括循環和分支。
它雖然不是Unix/Linux系統內核的一部分,但它調用了系統核心的大部分功能來執行程序、建立文件並以並行的方式協調各個程序的運行。因此,對於用戶來說,shell是最重要的實用程序,深入了解和熟練掌握shell的特性極其使用方法,是用好Unix/Linux系統的關鍵。
可以說,shell使用的熟練程度反映了用戶對Unix/Linux使用的熟練程度。
注意:單獨地學習 Shell 是沒有意義的,請先參考Unix/Linux入門教程,了解 Unix/Linux 基礎。
Shell有兩種執行命令的方式:
互動式(Interactive):解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條。
批處理(Batch):用戶事先寫一個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條一條地敲命令。
Shell腳本和編程語言很相似,也有變數和流程式控制制語句,但Shell腳本是解釋執行的,不需要編譯,Shell程序從腳本中一行一行讀取並執行這些命令,相當於一個用戶把腳本中的命令一行一行敲到Shell提示符下執行。
Shell初學者請注意,在平常應用中,建議不要用 root 帳號運行 Shell 。作為普通用戶,不管您有意還是無意,都無法破壞系統;但如果是 root,那就不同了,只要敲幾個字母,就可能導致災難性後果。
❻ Linux遠程執行Shell命令或腳本
1. 遠程執行Shell命令
2. 遠程執行Shell本地腳本
#
❼ Linux Shell 怎樣獲得命令的執行結果
1、CAT命令在用戶主目錄下創建一名為f1的文本文件,內容:Linux is useful for us all.You can never imagine how great it is。
❽ Linux主要shell命令詳解
命令替換
命令替換和重定向有些相似,但區別在於命令替換是將一個命令的輸出作為另外一個命令的參數。常用命令格式為:
command1
`command2`
其中,command2的輸出將作為command1的參數。需要注意的是這里的`符號,被它括起來的內容將作為命令執行,執行後的結果作為command1的參數。例如:
$
cd
`pwd`
該命令將pwd命令列出的目錄作為cd命令的參數,結果仍然是停留在當前目錄下。