日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell基础1

發布時間:2023/11/30 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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"


總結

以上是生活随笔為你收集整理的Shell基础1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。