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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

脚 本

發(fā)布時(shí)間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 脚 本 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.創(chuàng)建腳本

? ?#!/bin/bash ?##腳本第一行,用/bin/bash執(zhí)行

? ?echo "hello world" ? ##執(zhí)行的命令

? ?

? ? * /usr/local/bin ?本地開發(fā)、系統(tǒng)上的其他人使用的腳本

? ? * /usr/local/sbin ?本地開發(fā)、由root使用的腳本





? ?2.腳本的執(zhí)行和調(diào)試




? ?3.引用和轉(zhuǎn)義

? ? * ?在shell解析字符串時(shí)用于去除字符串中特殊字符或保留詞語的特殊含義。這會導(dǎo)致 按字面處理字符串,而不是展開變量或?qū)⑵洳糠謨?nèi)容視作具有特殊含義。

? ?

? echo "can i have a $FRUIT"

?* ?弱引用,將字符串放置在雙引號中,保留字符串中所有字符的文字值,$、`、\和!字符除外。換言之,變量擴(kuò)展和命令擴(kuò)展在雙引號內(nèi)仍起作用。

? echo 'can i have a $FRUIT'

?* ?強(qiáng)引用,將字符串放置在單引號中,保留字符串中所有字符的文字值,同時(shí)禁用所有擴(kuò)展

? * ?轉(zhuǎn)義,非引用的\是轉(zhuǎn)義字符。它保留了下一個(gè)字符的文字值。





? ?4.shell變量

? ? * ?用于為稍后在腳本中使用的名稱指定值,并且僅限于shell命令行或從中聲明變量的腳本

? ?FITST=jhon ?##定義變量

? ?echo ${FIRST}_$LAST ? ##使用變量



??

? ? 5.命令替換

? ? * ?在子shell中執(zhí)行指定命令并用命令輸出替換腳本中的命令替換。




? ? 6.算術(shù)運(yùn)算符

? ? * ?可以在程序中實(shí)現(xiàn)加、減、乘、除等數(shù)學(xué)運(yùn)算的運(yùn)算符。

? ?- ? ? 減法

? ?+ ? ? 加法

? ?** ? ?冪運(yùn)算

? ?* ? ? 乘法

? ?/ ? ? 除法

? ?% ? ? 余數(shù)

? ?i++ ? ?增量后

? ?i-- ? ?減量后

? ?+= ? ? 加等

? ?-= ? ? 減等

? ## 腳本內(nèi)容表示從1到10之和

? ?運(yùn)行結(jié)果

?

?

? ? 7.for循環(huán)

? ? * ?用于值列表中的相同命令的重復(fù)。

? ? ## ?(seq 2 2 8)表示從2到8隔兩個(gè)數(shù)取數(shù)

??



? ? 8.循環(huán)與計(jì)算結(jié)合

? ** 表示從1加到99的總和

? 結(jié)果




? ?9.數(shù)據(jù)庫備份示例

??

? ?#!/bin/bash

? ?for DB in $(mysql -uroot -p123 -e "show databases;" -E -N | grep -v '^*' | grep -v ? ?'schema$') ? ?//過濾要備份的數(shù)據(jù)庫

? ?do

? ?echo "Backup $DB" ? ? //顯示Backup 庫名

? ?mysqldump $DB > /dbbackup/$DB.dump ? ?//備份數(shù)據(jù)庫到dbbackup目錄

? ?done

? ?echo "OK" ? ? ?//備份完成后顯示OK

? ?for DBDUMP in /dbbackup/* ? ?//從dbbackup目錄中過濾庫名

? ?do

? ?SIZE=$(stat --printf "%s\n" $DBDUMP) ? //統(tǒng)計(jì)備份文件大小

? ?echo "$DBDUMP?$SIZE" ? //顯示庫名和大小

? ?done




? ?10.位置參數(shù)


? *?使用read提示用戶輸入(使用-p選項(xiàng))并將其直接存儲到一個(gè)或多個(gè)變量,為交互式輸入

? ?測試

??*?使用位置參數(shù)來讀取傳遞給腳本的命令行參數(shù)或選項(xiàng)輸入。各種特殊變量存儲傳遞的選項(xiàng)編號。

? ? 指定的位置參數(shù)總數(shù):$#

? ? 位置參數(shù)自身:$0、$1、$2、$3....

? ? 所有位置參數(shù): $@、$*

? ?測試

?



?? 11.退出狀態(tài)

? ??* ?Linux命令完成時(shí),將返回退出狀態(tài)。成功完成程序時(shí),將返回0的推出狀態(tài)。這被bash當(dāng)作邏輯True值。非零退出狀態(tài)通常表示發(fā)生了錯(cuò)誤,并且被bash當(dāng)作邏輯False值。

? ?echo $? ?##退出狀態(tài)的值被存儲在"?"中,查看退出狀態(tài)

? ?* ?退出狀態(tài)數(shù)字的含義

? ?0 ? ?##在指定的文件中找到了模式

? ?1 ? ?##在指定的文件中未找到模式

? ?>1 ? ?##一些其他錯(cuò)誤(無法打開文件、錯(cuò)誤的搜索表達(dá)式等)

?



? ?12.test條件判斷

? ?* ?test命令可用于評估bash腳本中的表達(dá)式。它評估其參數(shù)所指定的表達(dá)式,如果表達(dá)式為true,返回零退出狀態(tài),如果表達(dá)式為false,則返回非零退出狀態(tài)。test具有替代語法,使用方括號"[]"將表達(dá)式括起來,這樣更易于閱讀。

? ?* ?非零或零長度字符串運(yùn)算符

? ? [ -n westos];echo $? ? ##判斷不是非零字符,也可寫為test -n westos;echo $?

???[ -z westos];echo $? ? ##判斷是非零字符

??

? ?* ?字符串比較運(yùn)算符


? ?= ? ?##等于字符

? != ? ?##不等于字符


? ?* ?數(shù)字比較運(yùn)算符

??-eq ? ?等于

? ?-ne ? ? ? ? ? 不等于

? ?-lt? ? 小于

? ?-le ? 小于等于

? ?-gt ? ? ? ? ?大于

? ?-ge ? ? ? ? 大于大于

? ? ?

? ?* ?文件狀態(tài)運(yùn)算符

? ?測試


? ? -b ? ?##塊設(shè)備文件

? ? -c ? ?##字符設(shè)備文件

? ? -e ? ?##文件是否存在

? ? -f ? ?##是否是常規(guī)文件

? ? -d ? ?##是否是目錄

? ? -S ? ?##套接字文件

? ? -L ? ?##是否是鏈接


? ? * ?二進(jìn)制文件運(yùn)算符

? ?

? ? -ef ? ?##兩文件是否相同

? ? -nt ? ?##第一個(gè)文件是否比第二個(gè)新

? ? -ot ? ?##第一個(gè)文件是否比第二個(gè)舊


? ? * ?邏輯運(yùn)算符

? ? -a ? ?##并且,兩個(gè)條件同時(shí)滿足

? ? -o ? ?##或者,兩個(gè)條件最少滿足任意一個(gè)

? ? ! ? ?##給結(jié)果取反

? ? ?&& ? ?##結(jié)果正確執(zhí)行

? ? ?|| ? ?##結(jié)果不正確執(zhí)行



? ??

? ? 13.if語句

? ?* ?if命令檢查if后面的命令或列表的退出值。如果第一個(gè)命令評估為true/零,則運(yùn)行then之后的命令列表,直至任一else。如果第一個(gè)命令評估為false/非零,則運(yùn)行else與fi之間的命令列表(反向平寫if,標(biāo)記if塊的結(jié)束)。


#!/bin/bash

if

????????[ -z "$1" ] ? ? //腳本后沒跟文件

then

????????echo please give me file ? //顯示please give me file

elif

????????[ ! -e "$1" ] ? ? ? //如果腳本后跟的文件不存在 ? ?

then

????????echo "$1 is not exist" ? ?//顯示文件is not exist

else

????????for NAME in `cat $1` ? ? ? //從文件中過濾NAME

????????do

?????????????USER=`getent passwd $NAME` ? //檢測用戶是否存在

?????????????if

?????????????[ -z "$USER" ] ? ? //如果用戶不存在

?????????????then

???????????????????useradd $NAME ? ?//添加用戶

???????????????????echo wsetos | passwd --stdin $NAME ? //并設(shè)置密碼

?????????????else

???????????????????echo $NAME is exist ? ? ?//顯示用戶存在

?????????????fi

?????????done

fi ? ? ?//結(jié)束

? ? ?* ?測試




? ? 14.case語句

? ?* ?它能夠把變量的內(nèi)容與多個(gè)模板進(jìn)行匹配,再根據(jù)成功匹配的模板去決定應(yīng)該執(zhí)行哪部分代碼。esac標(biāo)記結(jié)束




#!/bin/bash

case "$2" in

?????+) ? ?//第二個(gè)變量為+

??????echo num=$[ $1 + $3 ] ? //輸出$1 + $3的值

?????;;

?????-) ? ?//第二個(gè)變量為-

??????echo num=$[ $1 - $3 ] ? //輸出$1 - $3的值

??????;;

?????%) ? ?//第二個(gè)變量為%

??????echo num=$[ $1 * $3 ] ? //輸出$1 % $3的值

??????;;

??????/) ? //第二個(gè)變量為/

??????echo num=$[ $1 / $3 ] ? //輸出$1 / $3的值

??????;;

?????*) ? ? //第二個(gè)變量為其他

??????echo ??"please input right command" ? //輸出please input right command

??????;;

esac

? ?* ?測試


? ? 15.expect語句

? ?* ?實(shí)現(xiàn)自動應(yīng)答腳本。

? ?交互輸入腳本

??

??? ## 使用expect腳本之前要yum install expect -y

? ?

? ? expect腳本

? ?#!/user/bin/expect ? ?//告訴操作系統(tǒng)腳本里的代碼使用那一個(gè)shell來執(zhí)行。

? ?set timeout 10 ? ? ? //設(shè)置后面所有的expect命令的等待響應(yīng)的超時(shí)時(shí)間,單位為秒

? ?spawn /mnt/ask.sh??//spawn是expect的內(nèi)部命令,作用是給后面的shell指令加個(gè)殼,用來傳遞交互指令

? ?expect "who" ? ?//判斷上次輸出結(jié)果里是否包含“who”的字符串,如果有則立即返回,否則等待超時(shí)時(shí)間后返回。

? ?send "haha\r" ? //執(zhí)行交互動作,相當(dāng)于手工輸入"westos"。

? ?expect "old" ??

? ?send "13\r"

? ?expect "happy"

? ?send "happy\r"

? ?expect eof ? ?//作用是在輸出中搜索文件結(jié)束符,如果沒有這一行,腳本會立即退出,得不到正確結(jié)果。

? ?##?interact表示執(zhí)行完成后保持交互狀態(tài),把控制權(quán)交給控制臺,這個(gè)時(shí)候就可以手工操作了。否則退出登錄。



? * ?測試



? ?16.環(huán)境變量

? ?* ?shell和腳本使用變量來存儲數(shù)據(jù) ,有些變量可以連同它們的內(nèi)容傳遞給子進(jìn)程,這些變量我們稱之為環(huán)境變量,分為三種

? ?(1) 臨時(shí)設(shè)置,換了shell后不存在


? ?(2) 用戶級別設(shè)置,相對應(yīng)的用戶一直生效,切換用戶后不生效

? ? ?修改~./bash_profile文件

? ? ?* 測試

? ?(3)系統(tǒng)級別修改,切換用戶后也會生效

? ? ?修改/etc/profile文件

? ? * 測試

? ?(4) env ?##查看環(huán)境變量



? ?17.別名

? ? * ?自定義屬于自己的系統(tǒng)命令。

? ?(1) 臨時(shí)生效

? ?alias xie = 'vim' ? ##臨時(shí)設(shè)置別名

? ?alias ? ? ##查看別名

? ?(2) ?永久生效

? ? 修改~./ bashrc文件

? ?* 測試

? ? source ?./ bashrc ?##文件生效

? ? (3) 刪除別名

? ? ?unalias ?xie ?


? ?18.函數(shù)

#!/bin/bash

ACTION () { ? ? //設(shè)置函數(shù)

if [ $2 $1 ];then ? //判斷條件

? ?echo "$1 is $3" ?

fi

}

? ?ACTION $1 ?"! -e" ‘not exist’ ?//使用函數(shù)

? ?ACTION $1 ?"-b" ‘not exist’

? ?ACTION $1 ?"-f" ‘not exist’

? ?ACTION $1 ?"-L" ‘not exist’

? ?ACTION $1 ?"-d" ‘not exist’

? ?ACTION $1 ?"-c" ‘not exist’

? ?ACTION $1 ?"-s" ‘not exist’











本文轉(zhuǎn)自 漂浮的天堂? 51CTO博客,原文鏈接:http://blog.51cto.com/12774215/1941448,如需轉(zhuǎn)載請自行聯(lián)系原作者

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。