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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

[读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts

發(fā)布時(shí)間:2024/4/14 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

shell scripts語法

#!/bin/bash 規(guī)定使用bash語法解釋scripts #Program: 表明程序開始 主程序部分 exit 0 表明程序結(jié)束 #用sh執(zhí)行腳本會(huì)新開一個(gè)子進(jìn)程bash來執(zhí)行,腳本中產(chǎn)生的變量不存在與父進(jìn)程 #用source 執(zhí)行腳本會(huì)直接在本進(jìn)程中執(zhí)行腳本,變量會(huì)保留。 ?注意如果用SOURCE執(zhí)行就不要加exit 0了,因?yàn)樗鼤?huì)關(guān)閉父進(jìn)程。 sh 腳本文件 參數(shù)一 參數(shù)二 。。。 $0文件名 $1參數(shù)一 $#參數(shù)個(gè)數(shù) $@顯示所有參數(shù)

?

date1=$(date -d '-1 day' +'%Y%m%d%A') date指令-d?'-1 day'表示一天前,也可以用week year month等。?+'%Y%m%d%A'是把日期傳給變量 total=$(($num1*$num2)) ? ?$((表達(dá)式)) ? 用$加雙括號(hào)可以計(jì)算表達(dá)式, 只支持整數(shù)。 printf {"%d * %d = %d",$num1,$num2,$total} ?用printf格式化輸出記得加 {}大括號(hào) ? test指令 測試文檔,目錄,比較兩個(gè)數(shù)值,兩個(gè)文件等,權(quán)限等,用法巨多,參考P453 test -e sh04.sh && echo "yes" || echo "no" ?如果文件存在則輸出YES ? -e測試文件或目錄是否存在 read -p "filename:" filename #檢查文件的rwx讀寫執(zhí)行權(quán)限 test -r $filename && authority='r' || authority='_' ?記得要用$把變量取出后才能使用 test -w $filename && authority=$authority'w' || authority=$authority'_' ? 注意是給authority重新復(fù)制,不可au=au+xx這樣!! test -x $filename && authority=$authority'x' || authority=$authority'_' echo "$authority" [ $a == $b ] && echo "equel" || echo "not" ? 可用中括號(hào)來進(jìn)行變量的判斷 注意中括號(hào)兩側(cè),判斷號(hào)兩側(cè)必須留空格!!! 如果變量時(shí)字符串的時(shí)候要用雙引號(hào)引起 如[ "$a" == "$b" ] ?否則 如a="nihao",$a=nihao, "$a"="nihao",如果沒雙引號(hào)的nihao就變成變量了 ?

PS:shell中單引號(hào)中不會(huì)把變量的值調(diào)出,直接使用字面意思。 ?而雙引號(hào)就會(huì)引用出隱含意,比如\n就會(huì)生效?

sed "s/'/\"/g" sh05.sh ? 就可以將單引號(hào)換成單引號(hào),而sed 's/\'/"/g' sh05.sh 就不可以,因?yàn)榇藭r(shí)反斜杠轉(zhuǎn)義符無生效!! [ "$yn" == "n" -o "$yn" == "N" ] && echo "no" && exit 0 ? ? ?1,-o代表或 2,連續(xù)使用&&可延續(xù)判斷,如先輸出no再exit

?

[ "$#" -lt "2" ] && echo "avgs too little" && exit 0 中括號(hào)比較不能用>這種符號(hào) 要用 gt,lt,eq,ne,ge,le

?

if else 多重判斷語法 read -p "please input (Y/N):" yn if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then ? ? #記得中括號(hào)之間的內(nèi)容一定要有空格!!!! ? ? IF后一定要有分號(hào);!!! echo "yes" exit 0 elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then ?# if ?elif ?與中括號(hào)之間,一定要有空格!!! echo "no" exit 0 else echo "i don't know what you'v type in" fi

?

testing=$(netstat | grep ":http") ?將輸出導(dǎo)入變量的語法!! date --date "20101018" +%s ?把日期字符串轉(zhuǎn)化為秒! ?注意字符串要引號(hào)括起, +%s前必須空格!! shell考慮空格的!!

?

case語法 case $1 in ? #case 變量 in "hello") ? ? ? ?#字符串加右括號(hào) echo "you type hello" ;; ? ? ? ?#雙分號(hào)代表此段結(jié)束 "") echo "you type nothing" ;; *) ? ? ? ? ? ? ?#星號(hào)代表default echo "else" ;; esac ? ? ? ? #反寫case代表case語法段結(jié)束

?

function建立函數(shù)語法 function printIt() ?#function關(guān)鍵字 空格 函數(shù)名 括號(hào) { ? ? ? ? ? ? ? ? ? ? ? ? #用雙大括號(hào)包圍函數(shù)體 echo "I just use function" } printIt ? ? ? ? ? ? ? ? #調(diào)用函數(shù)時(shí),只需寫函數(shù)名,不用括號(hào)!!! printIt exit 0 函數(shù)名 參數(shù)一 參數(shù)二 。。。 $0文件名 $1參數(shù)一 $#參數(shù)個(gè)數(shù) $@顯示所有參數(shù) ? 循環(huán)loop read -p "please input a word,type yes to end:" word while [ "$word" != "yes" ] && [ "$word" != "YES" ] ? ?#條件可以用|| &&相連 ? ?do開始 done結(jié)束 do read -p "please input a word,type yes to end:" word done read -p "please input a word,type yes to end:" word until [ "$word" == "yes" ] || [ "$word" == "YES" ] do read -p "please input a word,type yes to end:" word done

forxunhuan

for animal in dog cat bird elephanp ? ? #語法跟python差不多, 后面的循環(huán)列表用空格隔離 do echo "this is ${animal}s" ? ? ? ? ? ? ?#這里要注意 如果想在變量后直接加字符 ?就用{}大括號(hào)括住再取出變量 done exit 0 users=$(cut -d ':' -f1 /etc/passwd) ?通過指令把多個(gè)值(多行)存到變量中 ?再用for循環(huán)多個(gè)值 for username in $users do id $username finger $username done

?

seq 相當(dāng)于python的range() sum=0 for i in $(seq 1 100) ?#從1到100的序列 ? ?seq 1 2 10表示1到10步長為2 ? seq 10 -1 1 表示10到1 步長為-1 do sum=$(($sum+i)) # ?錢雙括號(hào)來計(jì)算 done echo "$sum" for循環(huán)的第二種形式 read -p "input a number:" num sum=0 for((i=0;i<=num;++i)) ? #支持i=i+1 i++ ++i這樣的操作? do sum=$((sum+i)) done echo "$sum" scripts 調(diào)試 sh -x 很有用 把運(yùn)行的語句打印出來 變量也顯示為當(dāng)時(shí)的值 ? ? -n 僅顯示錯(cuò)誤提示,不運(yùn)行

?

gcc makefile gcc -c file.c 產(chǎn)生.o文件 ? ? ? ? ? gcc -o filename file1.o file2.o ?產(chǎn)生filename.exe文件 main:hello.o hello2.o ? 前面的main是文件名而已,與exe文件名對(duì)應(yīng)即可,然后列舉需要用到的。o文件 gcc -o main hello.o hello2.o ? 這里前面空格用TAB

當(dāng)更新了.c文件后,直接再下一次make命令就可以重新編譯

轉(zhuǎn)載于:https://www.cnblogs.com/iyjhabc/archive/2012/10/18/2987483.html

總結(jié)

以上是生活随笔為你收集整理的[读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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