Shell基礎1

0 Shell基礎

0.1 Shell是什么

0.1.1 Shell是什么

Shell是一個命令行解釋器,它為用戶提供了一個向Linux內核發送請求以便運行程序的界面系統級程序,用戶可以用Shell來啟動、掛起、停止甚至編寫一些程序。

硬件 <-內核 <- Shell命令解釋器<-外層應用程序

? ? ? ? ? ? 0101 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ls

?

Shell還是一個功能相當強大的編程語言,易編寫,易調試,靈活性強。

Shell是解釋執行的腳本語言,在Shell中可以直接調用Linux系統命令。

?

0.1.2 Shell的分類

Bourne Shell:從1979年起UNIX就開始使用bourne Shellbourne Shell的主文件名為sh

C ShellC Shell主要在BSD版的UNIX系統中使用,其語法和C語言相類似而得名

?

Shell的兩種主要語法類型有BourneC,這兩種語法彼此不兼容。

Bourne家族主要包括shkshBashpshzsh

C家族主要包括cshtcsh

?

BashBashsh兼容,現在使用的Linux就是使用Bash作為用戶的基本Shell

?

0.1.3 Linux支持的Shell

/etc/shells文件中記錄的是系統支持的shell

sh ??#此命令用于啟動Shell

exit ?#此命令用于退出Shell

?

0.2 Shell腳本的執行方式

0.2.1 echo輸出命令

echo 選項 變量

作用:將變量顯示到標準輸出

選項:

-e 支持反斜線控制的字符轉換

?

\\ 輸出\本身

\a 輸出警告音

\b 退格鍵,向左刪除 ??

\c 取消輸出行末的換行符

\e ESCAPE

\f 換頁符

\n 換行符

\r 回車鍵

\t 制表符,也就是tab

\v 垂直制表符


\0nnn 按照八進制ASCII碼表輸出字符。其中0為數字零,nnn是三位八進制數。

\xhh ?按照十六進制ASCII碼表輸出字符。其中hh是兩位十六進制數


例子:

echo -e "ab\bc"

#輸出結果是ac

echo -e "\e[1;31mabcd\e[0m"

#輸出顏色,abcd為輸出內容? ?

30m黑 ?31m紅 ?32m綠 ?33m黃 ?34m藍 ?35m洋紅 ?36m青 ?37m

0.2.2 第一個腳本

vi hello.sh

?

#!/bin/bash

#The first program

#Author:haha (E-mail:haha@xxx.com)

?

echo -e "hello world"

?

0.2.3 執行腳本

賦予執行權限,直接運行

chmod 755 hello.sh

./hello.sh

?

通過bash調用執行腳本,此時不必有執行權限

bash hello.sh

?

cat -A 文件名

#查看隱藏字符,如換行符

?

dos2unix 文件名

#windows格式轉換成UNIX格式

?

unix2dos 文件名

#UNIX格式轉換成windows格式

?

0.3 bash的基本功能

歷史命令與命令補全

0.3.1 歷史命令

history 選項 文件名(歷史命令保存文件)

選項:

-c 清空歷史命令

-w 把緩存中的歷史命令寫入歷史命令保存文件(在各自的家目錄中)~/.bash_history

history -c ?#清空緩存歷史命令

history -w ?#將緩存的歷史命令寫入~/.bash_history

history -w tmp.txt ?#將緩存的歷史命令寫入tmp.txt

歷史命令默認會保存1000條,可以在環境變量配置文件/etc/profile中進行修改

?

歷史命令的調用

使用上、下箭頭調用以前的歷史命令

使用!n”重復執行第n條歷史命令

使用!!”重復執行上一條命令

使用!字串”重復執行最后條以該字串開頭的命令

?

?

0.3.2 命令與文件補全

bash中,命令與文件補全是非常方便與常用的功能

只要在輸入命令或文件時,按“Tab”鍵就會自動進行補全

?

0.4 命令別名與常用快捷鍵

0.4.1 命令別名

alias 別名='原命令'

#設定命令別名,臨時生效

?

alias

#查詢命令別名

?

命令執行時順序

1、第一順位執行用絕對路徑或相對路徑執行的命令

2、第二順位執行別名

3、第三順位執行bash內部命令

4、第四順位執行按照$PATH環境變量定義的目錄查找順序找到的第一個命令

???

echo $PATH 打印環境變量的路徑

?

讓別名永久生效:修改家目錄下的.bashrc文件

vi /root/.bashrc

?

刪除別名

unalias 別名

?

0.4.2 bash常用快捷鍵

Ctrl+A 把光標移動到命令行開頭

Ctrl+E 把光標移動到命令行結尾

Ctrl+C 強制終止當前的命令

Ctrl+L 清屏,相當于clear命令

Ctrl+U 刪除或剪切光標之前的命令

Ctrl+K 刪除或剪切光標之后的命令

Ctrl+Y 粘貼Ctrl+UCtrl+K剪切的內容

Ctrl+R 在歷史命令中搜索,按下Ctrl+R之后,就會出現搜索界面,只要輸入搜索內容,就會從歷史命令中搜索。

Ctrl+D 退出當前終端 相當于logout

Ctrl+Z 暫停并放入后臺

Ctrl+S 暫停屏幕輸出

Ctrl+Q 恢復屏幕輸出

?

0.5 輸入輸出重定向

0.5.1標準輸入輸出

設備 ???設備文件名 ???文件描述 ???類型

鍵盤? ? ? /dev/stdin ??????0 ??????標準輸入

顯示器 ?/dev/stdout ?????1 ??????標準輸出

顯示器? ?/dev/sdterr ?????2 ??????標準錯誤輸出

?

0.5.2輸出重定向

???類型 ??????????????符號 ??????????????作用

標準輸出重定向 ????

命令 >文件 ?以覆蓋的方式,把命令的正確輸出輸出到指定的文件或設備當中

命令 >>文件 ?以追加的方式

?

標準錯誤輸出重定向?

錯誤命令 2>文件 ?????覆蓋

錯誤命令 2>>文件 ????追加

?

?

正確輸出和錯誤輸出同時保存)

命令 >文件 2>&1 ???覆蓋

命令 >>文件 2>&1 ??追加

命令 &>文件 ? ?覆蓋

命令 &>>文件 ? 追加

?

正確輸出和錯誤輸出分別保存) ??????????

命令 >>文件1 ?2>>文件2 ? ?正確追加文件1 ?錯誤追加文件2

?

ls &>/dev/null ???#丟棄沒用的輸出信息ls,不管命令輸出什么,執行就好

?

0.5.3 輸入重定向?

(用的不多,用于給源碼包打補丁)

wc 選項 文件名

選項

-c 統計字節數

-w 統計單詞數

-l 統計行數

?

1、命令wc,回車

2、輸入文本

3Ctrl+D #統計輸入的行數、單詞數、字符數

?

命令<文件 ??把文件作為命令的輸入

wc<anaconda-ks.cfg ?統計anaconda-ks.cfg文件

wc<<flag

>asdg

>afsda

>gerge

>flag

#統計兩個flag之間的內容(flag是標志)

?

0.6 多命令順序執行與管道符

0.6.1 多命令順序執行

多命令執行符 ???格式 ????????????作用

????? ?????命令1;命令2 ????多條命令順序執行,命令之間沒有任何邏輯聯系

?????&& ????命令1 &&命令2 ???邏輯與:命令1正確執行,命令2執行,否則命令2不執行

?????|| ? ? ? ?命令1 ||命令2 ????邏輯或:命令1不正確執行,命令2執行,否則命令2不執行

?

dd用于磁盤復制

dd if=輸入文件 of=輸出文件bs=字節數count=個數

?

選項:

if=輸入文件 ?指定源文件或源設備

of=輸出文件 ?指定目標文件或目標設備

bs=字節數 ?指定一次輸入/輸出多少字節,即把這些字節看做一個數據塊

count=個數 ?指定輸入/輸出多少個數據塊

?

例子

date; dd if=/dev/zero of=/root/testfile bs=1k count=10000; date

#判斷復制硬盤用了多長時間

?

命令&&echo yes||echo no

#可以判斷命令是否正確

?

0.6.2管道符

命令1 |命令2

#命令1的正確輸出作為命令2的操作對象

?

例子

ll -a /etc/ | less

netstat -an | grep "ESTABLISHED"

?

grep 選項 “搜索內容” 文件名

選項:

-i 忽略大小寫

-n 輸出行號

-v 反向查找

--color=auto 搜索出的關鍵字用顏色標識

?

0.7 多命令順序執行與管道符

0.7.1 通配符

匹配一個字符

* ?匹配多個字符

[] 匹配中括號中的一個字符。如[abc]

[-] 匹配一個范圍。如[a-f]

[^] 匹配不是中括號內的一個字符。如[^0-9],代表匹配一個不是數字的字符

例子:

rm -rf * #清空

ls ?abc

ls [0-9]*

ls [^0-9]*

0.7.2 bash中其他特殊符號

' ' ?單引號 特殊符號如“$”和“`(反引號)都沒有特殊含義

" " ?雙引號

$ 代表調用變量的值 ?

`引用命令 ?

\ 轉義字符

` ` ?反引號 內容是系統命令,在bash中先執行

$() 同反引號

# 注釋

$ 用于調用變量的值,如需要調用變量name的值時,需要用$name的方式得到變量的值

\ 轉義字符,跟在其后的特殊符號失去作用

?

例子

name=sc

echo $name

echo '$name'

echo "$name"

?

引用一個命令

abc=`date` ?或者 ?abc=$(date)

echo $abc

?

echo '$(date)'

echo "$(date)"

?

0.8 bash變量

0.8.1 什么是變量

變量是計算機內存的單元,其中存放的值可以改變。

Shell腳本需要保存一些信息時,如一個文件名或是一個數字,就把它存放在一個變量中。

每一個變量有一個名字,所以很容易引用它。

使用變量可以保存有用信息,使系統獲知用戶相關設置,變量也可以用于保存暫時信息。

0.8.2 變量設置規則

由字母、數字、下劃線組成,以字母、下劃線開頭。

默認類型是字符串型

用等號連接,不能有空格

值有空格,用引號引起來

值可以使用轉義字符

值可以疊加。$變量名” 或者 ?${變量名}

把命令結果作為變量值賦予變量 ` ` ?$() ?

環境變量名大寫

?

0.8.3 變量分類

用戶自定義變量

環境變量:保存和系統操作環境相關的數據

位置參數變量:向腳本當中傳遞參數,變量名不能自定義,變量作用是固定的

預定義變量:bash中已經定義好的變量,變量名不能自定義,變量作用是固定的

?

0.8.4 本地變量(用戶自定義變量)

例子:

name="ha ha"

?

變量疊加

aa=123

aa="$aa"456

aa=${aa}789

?

變量調用

echo $name

?

變量查看(系統所有變量)

set

?

變量刪除

unset name

?

0.9 環境變量

0.9.1 環境變量是什么?

用戶自定義變量只在當前Shell中生效

環境變量在當前Shell和這個Shell的所有子Shell當中生效

如果把環境變量寫入相應的配置文件,那么這個環境變量就會在所有的Shell中生效

?

0.9.2 設置環境變量

export 變量名=變量值

#聲明變量

?

exprot 變量名

#將已聲明的本地變量變為環境變量

?

env

#查詢變量

?

unset 變量名

#刪除變量

?

bash

#進入子Shell


pstree

#查看進程樹

0.9.3 系統常見環境變量

PATH:系統查找命令的路徑

echo $PATH


PATH="&PATH":/root/sh

#PATH變量疊加,命令行臨時改變

?

PS1:定義系統提示符的變量

\d ?顯示日期,格式為“星期 月 日”

\h ?顯示簡寫主機名。如默認主機名“localhost

\t ?顯示24小時制時間,格式為“HH:MM:SS

\T ?顯示12小時制時間,格式為“HH:MM:SS

\A ?顯示24小時制時間,格式為“HH:MM

\@ ?HH:MM AM/PM

\u ?顯示當前用戶

\w ?顯示當前所在目錄的完整名稱

\W ?顯示當前所在目錄的最后一個目錄

\# ?執行的第幾個命令

\$ ?提示符。root#

?

PS1='[\u@\h \W]\$ '

例子

PS1='[\u@\@ \h \# \W]\$ '

?

0.10 位置參數變量

$n ?n為數字,$0代表命令本身,$1-$9代表第一到第九個參數,十以上的參數需要用大括號包含,如${10}

$* ?代表命令行所有參數,$*把所有參數看成一個整體 ??

$@ 也代表命令行中所有的參數,不過$@把每個參數區分對待

$# ?代表命令行中所有參數的個數

?

例子1

#!/bin/bash

num1=$1

num2=$2

sum=$(($num1 + $num2))

#變量sum的和是num1num2

echo $sum

#打印變量sum的值

?

例子2

#!/bin/bash

echo "A total of $# parameters"

echo "The parameters is: $*"

echo "The parameters is: $@"

?

?

例子3$*$@的區別

#!/bin/bash

for i in "$*"

????do

????????echo "$i"

????done

?

for i in "$@"

????do

????????echo "$i"

? ? done

?

0.11 預定義變量

其實位置參數變量就是預定義變量的一種

?

$? ?最后一次執行命令的返回狀態。為0則表示正確執行。

$$ ?當前進程的進程號(PID

$! ?后臺運行的最后一個進程的進程號

?

?

例子 variable.sh

#!/bin/bash

?

echo "The current process is $$"

#輸出當前進程的PID

#這個PID就是variable.sh這個腳本執行時,生成進程的PID

?

find /root -name hello.sh &

#使用find命令在root目錄下查找hell.sh文件

#符號&的作用是把命令放入后臺執行

?

echo "The last one Daemon process is $!"

?

接受鍵盤輸入

read 選項 變量名

選項:

-p "提示信息":在等待read輸入時,輸出提示信息

-t 秒數: ? ?指定等待時間

-n 字符數: ?指定字符數

-s ???: ? ? 隱藏輸入的數據,適用于機密信息的輸入

?

?

例子

#!/bin/bash

?

read -t 30 -p "Please input your name: " name

echo "Name is $name"

?

read -s -t 30 -p "Please enter your age: " age

echoo ?" "

echo "Age is $age"

?

read -n 1 -t 30 -p "Please select your gender[M/F]:" gender

echo ?" "

echo "Sex is $gender"


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

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

相關文章

centos7自帶數據庫MariaDB重啟和修改密碼

1&#xff1a;MariaDB和mysql差不多是mysql的一個分支&#xff0c;完全兼容mysql的命令。 2&#xff1a;centos 7 中自帶MariaDB&#xff0c; 需要在centos中安裝mysql的時候就需要多注意了。 3&#xff1a;啟動 停止 重啟 MariaDB systemctl start mariadb.service #啟動Maria…

Shell基礎2

0.12 數值運算與運算符 aa11 bb22 cc$aa$bb echo $cc #1122&#xff0c;因為變量默認是字符串類型 1、declare聲明變量類型 declare /- 選項 變量名 選項&#xff1a; - 給變量設定類型屬性 取消變量的類型屬性 -i 將變量聲明為整數型 -x 將變量聲明為環境變量 …

XGBoost入門及實戰

kaggle比賽必備算法XGBoost入門及實戰 xgboost一直在kaggle競賽江湖里被傳為神器&#xff0c;它在對結構化數據的應用占據主導地位&#xff0c;是目前開源的最快最好的工具包&#xff0c;與常見的工具包算法相比速度提高了10倍以上&#xff01; XGBoost is an implementation o…

幾個常用算法的適應場景及其優缺點

機器學習算法太多了&#xff0c;分類、回歸、聚類、推薦、圖像識別領域等等&#xff0c;要想找到一個合適算法真的不容易&#xff0c;所以在實際應用中&#xff0c;我們一般都是采用啟發式學習方式來實驗。通常最開始我們都會選擇大家普遍認同的算法&#xff0c;諸如SVM&#x…

p1012拼數題解

#include<iostream> #include<algorithm> using namespace std; bool cmp(string b,string a) {return ba>ab;}//靈魂在這 int main() {string a[21];int n;cin>>n;for(int i1;i<n;i)cin>>a[i];sort(a1,an1,cmp);for(int i1;i<n;i)cout<&l…

常見算法及問題場景——圖

最短路徑 現實場景 1、一批貨從北京到廣州的的最快&#xff0c;或最省錢的走法。 把路線中各城市當作圖的頂點&#xff0c;各城市之間的花費時間&#xff0c;或金錢當作邊的權重&#xff0c;求兩點之間的最短路徑。 2、在城市群中建一個倉儲基地&#xff0c;建在什么位置可以…

EF ++屬性會更新實體

var lastBaby await _babyRepository.FirstOrDefaultAsync(); lastBaby.sort; -- sort原本為1 -- 最終會生成一條語句更新sort字段 exec sp_executesql NSET NOCOUNT ON;UPDATE [Babies] SET [BirthOrder] p0, [LastModificationTime] p1WHERE [Id] p2;SELECT ROWCOUNT; ,N…

分類算法應用場景實例二十則

1 O2O優惠券使用預測 以優惠券盤活老用戶或吸引新客戶進店消費是O2O的一種重要營銷方式。然而隨機投放的優惠券對多數用戶造成無意義的干擾。對商家而言&#xff0c;濫發的優惠券可能降低品牌聲譽&#xff0c;同時難以估算營銷成本。個性化投放是提高優惠券核銷率的重要技術&am…

Shell03

查看字符數的方法&#xff1a; seq -s " " 100 #以空格為分隔符&#xff0c;輸出從1到100 seq 100 #以換行為分隔符 charsseq -s " " 100 echo $chars echo ${#chars} #統計字符數 echo $(expr length "$chars") #統計字符數 echo $cha…

luogu P3244 [HNOI2015]落憶楓音

傳送門 md這題和矩陣樹定理沒半毛錢關系qwq 首先先不考慮有環,一個\(DAG\)個外向樹個數為\(\prod_{i2}^{n}idg_i(\)就是\(indegree_i)\),因為外向樹每個點入度為一,對于一個點有入度個父親可選,然后乘法原理起來就是答案 現在可能加一條邊會有環,那么答案可以考慮總方案減不合法…

EM算法 案例量則

例子一&#xff1a;理論&#xff1a; 簡版&#xff1a;猜&#xff08;E-step&#xff09;,反思&#xff08;M-step&#xff09;,重復&#xff1b; 啰嗦版&#xff1a; 你知道一些東西&#xff08;觀察的到的數據&#xff09;&#xff0c; 你不知道一些東西&#xff08;觀察不到…

遠程拷貝代碼 指定端口

將本地testdir拷貝到遠程服務器tmp目錄下 scp -r -p 9022 testdir xiaoming192.168.0.2:/tmp/ 轉載于:https://www.cnblogs.com/sea-stream/p/10436199.html

C#編寫TensorFlow人工智能應用 TensorFlowSharp

TensorFlowSharp入門使用C#編寫TensorFlow人工智能應用學習。 TensorFlow簡單介紹 TensorFlow 是谷歌的第二代機器學習系統&#xff0c;按照谷歌所說&#xff0c;在某些基準測試中&#xff0c;TensorFlow的表現比第一代的DistBelief快了2倍。 TensorFlow 內建深度學習的擴展支持…

簡單的MVC與SQL Server Express LocalDB

M模式&#xff1a; 類&#xff0c;表示數據的應用程序和使用驗證邏輯以強制實施針對這些數據的業務規則。V視圖&#xff1a; 應用程序使用動態生成 HTML 響應的模板文件。C控制器&#xff1a; 處理傳入的瀏覽器請求的類中檢索模型數據&#xff0c;然后指定將響應返回到瀏覽器的…

馬爾可夫鏈 (Markov Chain)是什么鬼

作者&#xff1a;紅猴子鏈接&#xff1a;https://www.zhihu.com/question/26665048/answer/157852228來源&#xff1a;知乎著作權歸作者所有。商業轉載請聯系作者獲得授權&#xff0c;非商業轉載請注明出處。馬爾可夫鏈 &#xff08;Markov Chain&#xff09;是什么鬼 它是隨機…

malloc/free 和 new/delete

(本文參考于網上&#xff09; 首先兩者都可用于申請動態內存和釋放內存&#xff61; 對于非內部數據類型的對象而言&#xff0c;只用malloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數&#xff0c;對象在消亡之前要自動執行析構函數。由于malloc/free是庫…

主題模型-LDA淺析

個性化推薦、社交網絡、廣告預測等各個領域的workshop上都提到LDA模型&#xff0c;感覺這個模型的應用挺廣泛的&#xff0c;會后抽時間了解了一下LDA&#xff0c;做一下總結&#xff1a; &#xff08;一&#xff09;LDA作用 傳統判斷兩個文檔相似性的方法是通過查看兩個文檔共…

dorado-SplitSpanel控件

1.這是一個界面布局控件 2.分為SideControl邊區域和MainControl主區域 3.常用屬性 3.1 collapsed&#xff1a;打開頁面時&#xff0c;邊區域是否顯示 3.2 position&#xff1a;邊區域占總的大小 轉載于:https://www.cnblogs.com/ergougougou/p/10438752.html

mysql-視圖、事物等

一、視圖 視圖是一個虛擬表&#xff08;非真實存在&#xff09;&#xff0c;其本質是【根據SQL語句獲取動態的數據集&#xff0c;并為其命名】&#xff0c;用戶使用時只需使用【名稱】即可獲取結果集&#xff0c;可以將該結果集當做表來使用。 使用視圖我們可以把查詢過程中的臨…