真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Linux基礎之如何編寫shell腳本-創(chuàng)新互聯(lián)

這篇文章主要介紹了Linux基礎之如何編寫shell腳本,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家專業(yè)提供武進企業(yè)網(wǎng)站建設,專注與網(wǎng)站設計、網(wǎng)站建設、H5網(wǎng)站設計、小程序制作等業(yè)務。10年已為武進眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。概述

Shell的概念是源自Unix的命令解釋器。Shell不僅可解釋用戶輸入的命令,同時,可解釋執(zhí)行基于命令的腳本語言。使用shell腳本能提高用戶操作和管理員進行系統(tǒng)管理的效率。shell腳本擅長處理純文本類型的數(shù)據(jù),而Linux中幾乎所有的配置文件、日志都是純文本類型。

如何編寫shell腳本腳本書寫規(guī)范
1.腳本統(tǒng)一存放目錄 
2.選擇解釋器, 開頭要寫#! XXX,內(nèi)核根據(jù)#!后的解釋器來確定用哪個解釋器解釋腳本內(nèi)容
3.編輯腳本使用vim, 配置~/.vimrc方便個人書寫習慣   
4.文件名規(guī)范,結尾以sh結束
shell的基本元素
1.#!/bin/bash 必須的,指出shell的類型
2.# 注釋。在shell中,注釋寫在#之后,#之后的內(nèi)容不會執(zhí)行
3.變量 
4.控制 循環(huán)分支
shell中的特殊符號
1.#! 注明執(zhí)行腳本采用的shell
2.$ 變量符。
與反斜杠轉(zhuǎn)義符相反,使其后的普通字符作為變量名,如$a表示變量a的值。變量
字符長度超過1個時,用{}括起來
3.單引號。
被引起的字符全部做普通字符,即全部原樣echo 'my $SHELL'
4.雙引號
引號內(nèi)的內(nèi)容,除$、轉(zhuǎn)義符\、倒引號`這三個保留特殊功能,其他字符均做普通字符。
5.倒引號(數(shù)字1鍵旁邊的那個鍵)
引號內(nèi)的字符串當做shell命令行解釋執(zhí)行(同樣的功能也可以使用$()來使用),得到的結果
取代整個倒引號括起來的部分。
6.反斜線
反斜線是轉(zhuǎn)義字符,它能把特殊字符變成普通字符。在某個字符前面利用反斜杠(\)能夠阻止
shell把后面的字符解釋為特殊字符。
7.*  代表0個或者多個特殊字符
例子 yum.* 代表的可以使yum.也可以是yum.a、yum.ab、yum.abc 當然小數(shù)點后面可以有多個字母
8.? 代表的是任意一個字符
例子 yum.? 可以是yum.a yum.b yum.c,但是要注意小數(shù)點后面必須有任意一個字符
9.[] 
代表的是中括號中的任意一個
[abcdef] 可以是a b c d e f 中的任意一個字母當然也可以是數(shù)字
[-]代表的是一個范圍
[a-z] 表示的是字母a到z之間的所有字母
[^]^是反向選擇符號從字面意思可以知道也就是非的意思
[^abc]表示只要不a b c 這三個字符中的任意一個就選擇
10.$( )
可以將命令替換輸出賦值給變量
11.{}
通過括號擴展可以生成需要的字串,括號中可以包含連續(xù)的序列或使用逗號分隔的多個項目,連續(xù)的序列包括一個起點和一個終點
user@computer: ~$ echo {a,b,c}
 a b c
user@computer: ~$ echo user{1,5,8}
user1 user5 user8
user@computer: ~$ echo {0..10}
0 1 2 3 4 5 6 7 8 9 10
user@computer: ~$ mkdir {dir1,dir2,dir3}
user@computer: ~$ ls –ld dir{1,2,3}
變量

shell變量可以保存路徑名、文件名或者一個數(shù)字等。分為三類:

本地變量: (局部變量)只在創(chuàng)建它們的Shell中使用,可以在shell程序內(nèi)任意使用和修改它
們。
環(huán)境變量: 可以在創(chuàng)建它們的Shell及其派生出來的任意子程序中使用。有些變量是用戶創(chuàng)建
的,其他的則是專用的(比如PATH、HOME)。是系統(tǒng)環(huán)境的一部分,不必去定義它們,可以在
shell程序中使用它們 。還能在shell中加以修改。
內(nèi)部變量: 由系統(tǒng)提供的。與環(huán)境變量不同,用戶不能修改它們。
本地變量
本地變量 在用戶現(xiàn)在的shell生命期的腳本中使用
 變量名=值
1.等號兩邊不可以有空格
2.取值包含空格,必須用雙引號括起來
3.Shell變量可以用大小寫字母,區(qū)分大小寫

變量是弱類型的, 不用聲明類型

# 變量聲明及賦值格式
變量=值(等號兩邊不能有空格)

# 變量的引用
 $變量名   
 ${變量名}
 變量名為1個字符時建議使用方式一,多余一個字符時建議使用方式二
 舉例: $a ${abc}

# 清除變量
unset 變量名
user@computer: ~$ name=Jack
user@computer: ~$ echo ${name}
user@computer: ~$ unset name  # 注意,name前沒有$

# 設置只讀變量
設置變量時,不想再改變其值,可以將之設為只讀變量
 變量名=值
 readonly  變量名
環(huán)境變量

Bash預設了很多環(huán)境變量,實際使用中,可以直接調(diào)用這些變量。環(huán)境變量可以用于所有子程序,著包括編輯器、腳本和應用

內(nèi)置環(huán)境變量

HOME: 代表使用者的家目錄。cd ~ 去到使用者的家目錄 或者利用 cd 就可以直接回到使用者
家目錄了。
SHELL: 目前這個環(huán)境使用的 SHELL 是哪個程序? 如果是 bash 的話,預設是 /bin/bash
PWD:用戶當前工作目錄的路徑。它指出用戶目前在Linux文件系統(tǒng)中處在什么位置。它是由
Linux自動設置的
HISTSIZE: 這個與“歷史命令”有關,曾經(jīng)下達過的指令可以被系統(tǒng)記錄下來,而記錄的“數(shù)目”
則是由這個值來設定的。 
PATH: 就是執(zhí)行文件搜尋的路徑,目錄與目錄中間以冒號(:)分隔, 由于文件的搜尋是依序由
PATH的變量內(nèi)的目錄來查詢,所以,目錄的順序也很重要。
環(huán)境變量可以在命令行中設置,但用戶注銷時這些值將丟失
   環(huán)境變量均為大寫
   必須用export命令導出

# 設置環(huán)境變量 
variable-name=value
export variable-name(環(huán)境變量名大寫)

# 顯示環(huán)境變量
env 可以看到所有的環(huán)境變量
echo $環(huán)境變量名 (顯示一個變量)

# 清除環(huán)境變量
unset 環(huán)境變量名

修改path環(huán)境變量

修改PATH環(huán)境變量,使腳本不用加路徑,直接輸入文件名字即可執(zhí)行。
# 命令行修改環(huán)境變量
以下在用戶user主目錄下操作:
mkdir shdir && cd shdir
vi hello
chmod 755 hello
cd ~
export PATH=$PATH:$HOME/shdir
在任何目錄下,輸入hello即可執(zhí)行該文件。
本方式下環(huán)境變量如果修改錯了,exit退出后重新登陸即可恢復系統(tǒng)默認的值。

配置文件中修改環(huán)境變量

注意,修改環(huán)境變量前最好先備份一下舊的:
export tem=$PATH
echo $tem >>pathbake

需要知道環(huán)境變量與哪些配置文件有關:不同發(fā)行版會有不同,但命名還是有通性的:
find / -name “*profile”
find / -name “*bashrc”
全局配置文件/etc/profile
本地配置文件~/.bashrc
內(nèi)部變量

內(nèi)部變量是Linux所提供的一種特殊類型的變量,這類變量在程序中用來作出判斷。在shell程序內(nèi)這類變量的值是不能修改的。

部分內(nèi)部變量是:
$# 傳送給shell程序的位置參數(shù)的數(shù)量
$? 最后命令的完成碼或者在shell程序內(nèi)部執(zhí)行的shell程序(返回值)
$0 shell程序的名稱
$* 調(diào)用shell程序時所傳送的全部參數(shù)的單字符串,"參數(shù)1", "參數(shù)2"…形式保存的參數(shù)
$@ "參數(shù)1", "參數(shù)2"…形式保存的參數(shù)
$n 第n個參數(shù)
$$ 本程序的PID
$! 上一個命令的PID
輸入與輸出
# read 從鍵盤上讀取變量的值
read  [選項]  變量名列表
    常用選項
    -a ANAME   將輸入讀入ANAME的數(shù)組      
    -n NCHARS  讀入N個字符                
    -p PROMPT  顯示一個提示                       
    -r         取消轉(zhuǎn)移                           
    -s         安靜模式,輸入的字符將不會提示     
    -t TIMEOUT 超過指定時間,read自動停止 
  
# echo 顯示字符串或變量的值
echo  [選項]  字符串
    常用選項
    -n  不在最后自動換行               
    -e  啟用反斜線控制字符的轉(zhuǎn)換       
    -E  不處理轉(zhuǎn)義字符。此為缺省選項;
#! /bin/bash
# 輸入一句話,打印輸入的話
read -p 'please type some words, I will print them: ' words
echo $words
條件測試
# test
test 條件表達式
如果測試條件為真,test命令會返回0,否則返回一個非0的數(shù)值
test 語句與if/then和case語句一起,構成shell編程的控制轉(zhuǎn)移結構

# []
[ 條件表達式 ]	
方括號的內(nèi)側(cè)兩邊各需一個空格

條件表達式的值為真返回零,為假時返回非零值
文件狀態(tài)判斷
條件語句真假
-d filename若文件filename為目錄文件,則返回真
-f filename文件是否存在且為普通文件,則返回真
-r filename若文件filename可讀,則返回真
-s filename若文件filename的長度大于0,則返回真
-w filename若文件filename可寫,則返回真
-x filename若文件filename可執(zhí)行,則返回真
-e filename文件是否存在
#! /bin/bash
# 輸入文件的絕對路徑,判斷文件是否存在
read  -p 'input file path: ' file
if [ -e $file ]
    then
    echo '文件存在'
else
    echo '文件不存在'
fi
條件語句
if  [ 條件表達式 ] 
    then
    命令序列1
else
    命令序列2
fi
當"條件表達式"的測試值為真時,執(zhí)行"命令序列1",否則,執(zhí)行"命令序列2"。命令序列中的命令
可以是一個或者多個。


if [ 條件表達式 ]; then
    命令序列
fi
當"條件表達式"的測試值為真時,執(zhí)行"命令序列",否則,執(zhí)行條件語句后面的命令。條件表達
式與then之間的分號";"起命令分隔符的作用。

語法形式三

if test 條件表達式1
    then
    命令序列1
elif [ 條件表達式2 ]
    then
    命令序列2
else
    命令序列3
fi
這是包含二層嵌套的條件語句,當"條件表達式1"為真時,執(zhí)行"命令序列1",否則,在"條件表
達式2"為真的情況下,執(zhí)行"命令序列2",否則,執(zhí)行"命令序列3","命令序列3"屬于第2個條
件語句的一部分。

#! /bin/bash
# 判斷輸入的路徑是文件還是目錄
read -p 'please input the file path: ' file
if [ -d $file ]
   then
   echo 'this is a directory'
elif [ -f $file ]
   then
   echo 'this is a file'
else
   echo 'wrong file type, or the file do not exist'
fi

操作符含義
n1 –eq n2判斷數(shù)字n1與n2是否相等,若相等,返回0,否則,返回1
n1 –ne n2判斷數(shù)字n1與n2是否不等,若不等,返回0,否則,返回1
n1 –lt n2判斷數(shù)字n1是否小于n2,若是,返回0,否則,返回1
n1 –gt n2判斷數(shù)字n1是否大于n2,若是,返回0,否則,返回1
n1 –le n2判斷數(shù)字n1是否小于或等于n2,若是,返回0,否則,返回1
n1 –ge n2判斷數(shù)字n1是否大于或等于n2,若是,返回0,否則,返回1
字符串操作符
操作符含義
string若字符串string非空,則返回真
-n string若字符串string長度大于0,則返回真
-z string若字符串string長度為0,則為返回真
string1 = string2若字符串string1和string2相等,則返回真
string1 != string2若字符串string1和 string2不等,則返回真
邏輯操作符
操作符含義
e1 –a e2邏輯表達式e1和e2同時為真時,返回0,否則,返回1
e1 –o e2邏輯表達式e1和e2有一個為真時,返回0,否則,返回1
! e1若邏輯表達式e1不為真時,返回0,,否則,返回1
循環(huán)語句
for 變量名 in 參數(shù)列表
    do
    命令列表
done
將"參數(shù)列表"中的元素依次賦給"變量名",在每次賦值后執(zhí)行"命令列表","參數(shù)列表"表示"變
量名"的取值范圍

for ((初始化變量值;結束循環(huán)條件;運算))
    do
    命令序列
done

while [ 條件表達式 ] 
    do
    命令列表
done
循環(huán)執(zhí)行"命令列表"中的命令,直至"條件表達式"的值為假。

Until [ 條件 ]
    do
    命令序列
Done
直到條件滿足時循環(huán)結束
#! /bin/bash
# 將指定目錄下(參數(shù)傳遞$1)的所有以.txt為后綴的文件更名為*.doc
directory=$1
if [ ! $directory ]
  then 
  echo "please input the argument directory"
  exit
fi
files=`ls ${directory}`
for file in $files;
  do
  if [ -f ${file} ]
    echo $file
    then 
    suffix=${file#*\.}
    echo $suffix
    if [[ $suffix == "txt" ]]
      then
      prefix=${file%\.*}
      mv $directory/$file $directory/$prefix.doc
    fi
  fi
done
函數(shù)
functionname() {
    命令列表
    return 
}
函數(shù)的調(diào)用方式為:
functionname arguments

感謝你能夠認真閱讀完這篇文章,希望小編分享Linux基礎之如何編寫shell腳本內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細的解決方法等著你來學習!


本文名稱:Linux基礎之如何編寫shell腳本-創(chuàng)新互聯(lián)
文章URL:http://weahome.cn/article/ccgosh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部