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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

shell脚本知识

發布時間:2024/9/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 shell脚本知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.Shell

? ? ?Shell的作用是解釋執行用戶的命令,用戶輸入一條命令,Shell就解釋執行一條,這種方式

稱為交互式(Interactive),Shell還有一種執行命令的方式稱為批處理(Batch),用戶事先寫一?個Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執行完,而不必一條

一條地敲命令。Shell腳本和編程語言很相似,也有變量和流程控制語句,但Shell腳本是解釋

執行的,不需要編譯,Shell程序從腳本中一行一行讀取并執行這些命令,相當于一個用戶把

腳本中的命令一行一 行敲到Shell提示符下執行。

?shell腳本是一個文本文件,不能被操作系統識別,但是可以執行,是因為有中間解釋器。

運行shell腳本時先加載解釋器,解釋器讀取文本參數進行運行。

?shell運行原理:

????1.命令中轉(創建子進程,分析執行,返回結果)

????2.創建進程完成任務

????3.父進程不受子進程錯誤影響

運行過程

test.sh將其內容以命令行參數傳遞給子bash,子bash再fork孫bash執行命令,將結果返回給子bash。

shell腳本:

? ?1 #!/bin/bash

? 2?

? 3 echo "hello bit"

?在腳本中第一行必須為:告知解釋器及版本,#!

?運行shell腳本的方法:

?1> bash或sh+文件名.sh

?2>/bin/bash或sh+文件名.sh

?3>chmod u+x test.sh 后直接運行./test.sh

cd與export 是比較特殊的命令,不會創建子進程,直接在當前環境下運行,這類命令被稱為內置命令。

舉個例子:

? 1 ? ?#!/bin/bash

? 4 ? ?sleep 1

? 5 ? ?pwd

? 6 ? ?sleep 1

? 7 ? ?cd ..

? 8 ? ?sleep 1

? 9 ? ?pwd

?10?

? 每隔一秒依次執行命令

? 結果:



? ?還有一個 .表示當前路徑,由當前的bash解釋命令。

2.shell變量可以分為環境變量本地變量

?環境變量可以從父進程傳給子進程,本地變量只存在于當前shell進程。

?printenv顯示環境變量,set設置本地變量和環境變量,環境變量是任何進程都有的,而本地變量是shell特有的。

3.eval

?eval命令將會首先掃描命令行進行所有的置換,然后再執行該命令。該命令適用于那些一次掃描無法實現其功能的變量。該命令對變量進行兩次掃描。這些需要進行兩次掃描的變量有時被稱為復雜變量。不過這些變量本身并不復雜。e v a l命令也可以用于回顯簡單變量,不一定是復雜變量

例子:

1>顯示test.sh內容

從結果看出使用eval命令不但可以置換該變量,還能夠執行相應的命令。第一次掃描進行了file變量置換,第二次掃描執行了該字符串中所包含的命令cat test.sh。

2>還可以用來顯示出傳遞給腳本的最后一個參數

? 在test.sh 腳本中寫入 eval echo ?\$$#,?運行test.sh。結果如下:

??

3>.給每個值一個變量名

?希望一個文件中的第一列成為變量名,第二列成為該變量的值

打開一個test寫入

name dandan

age ? 21

在file.sh中寫入

?1 #!/bin/bash

? 2?

? 3 while read NAME VALUE

? 4 do

? 5 eval "${NAME}=${VALUE}"

? 6 done <test

? 7 echo "$name $age"

運行file.sh,結果如下:

4>用eval命令創建指向變量的“指針"

4. ?``與$()的區別和聯系

舉一個例子:

?1. 1 #!/bin/bash

? 2?

? 3 echo `echo \$HOSTNAME`

? 4 echo $(echo \$HOSTNAME)

我們可以使用sh -x test.sh來分析bash是如何來解釋這個腳本的,返回的信息如下:

1>反引號中\$并沒有將$的特殊意義轉換 反引號包含的內容 echo \$hostname 仍然被解釋

為一個echo $HOSTNAME 取到了這個變量的值并輸出所以反引號返回的值為 localhost

?2>$()則正好相反,$明顯被\轉義成了一個普通字符,所以并沒有取到變量值,而是返回了


字符串本身的意思,故而返回了$HOSTNAME。


? ? 這說明反引號對反斜杠(\)有特殊的轉化,至少我們看到當我們直接用1個\時,它本身

并不會起到轉義的作用。

?2.再給程序中多加一個\,運行結果:

這次結果與上次運行結果差不多正好相反。

反引號反而輸出了$HOSTNAME的字面意思


$()如我們所愿的取到了變量值,并理所應當的輸出了一個被轉義的字符串\


3.若將代碼改為

?echo `echo \\\\`

echo $(echo \\\\)

運行結果:


4.若將代碼改為

?echo `echo \\\\\\\\`

echo $(echo \\\\\\\\)

運行結果:


由以上測試得出結論:

? ? 反引號其本身就對\進行了轉義,保留了其本身意思,如果我們想在反引號中起到\的特殊意義,我們必須使用2個\來進行表示。

所以我們可以簡單的想象成反引號中:?\\ = \

  • $()中則不需要考慮\的問題,與我們平常使用的一樣:\ = \

  • 不過一般情況下使用$()。

    5.crond定時任務

    crond 是linux用來定期執行程序的命令。當安裝完成操作系統之后,默認便會啟動此任務調度命令。crond命令每分鍾會定期檢查是否有要執行的工作,如果有要執行的工作便會自動執行該工作。而linux任務調度的工作主要分為以下兩類:

    1、系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存

    2、個人執行的工作:某個用戶定期要做的工作,例如每隔10分鐘檢查郵件服務器是否有新信,這些工作可由每個用戶自行設置
















    轉載于:https://blog.51cto.com/10541571/1788822

    總結

    以上是生活随笔為你收集整理的shell脚本知识的全部內容,希望文章能夠幫你解決所遇到的問題。

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