[读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts
生活随笔
收集整理的這篇文章主要介紹了
[读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
shell scripts語法
#!/bin/bash 規定使用bash語法解釋scripts #Program: 表明程序開始 主程序部分 exit 0 表明程序結束 #用sh執行腳本會新開一個子進程bash來執行,腳本中產生的變量不存在與父進程 #用source 執行腳本會直接在本進程中執行腳本,變量會保留。 ?注意如果用SOURCE執行就不要加exit 0了,因為它會關閉父進程。 sh 腳本文件 參數一 參數二 。。。 $0文件名 $1參數一 $#參數個數 $@顯示所有參數?
date1=$(date -d '-1 day' +'%Y%m%d%A') date指令-d?'-1 day'表示一天前,也可以用week year month等。?+'%Y%m%d%A'是把日期傳給變量 total=$(($num1*$num2)) ? ?$((表達式)) ? 用$加雙括號可以計算表達式, 只支持整數。 printf {"%d * %d = %d",$num1,$num2,$total} ?用printf格式化輸出記得加 {}大括號 ? test指令 測試文檔,目錄,比較兩個數值,兩個文件等,權限等,用法巨多,參考P453 test -e sh04.sh && echo "yes" || echo "no" ?如果文件存在則輸出YES ? -e測試文件或目錄是否存在 read -p "filename:" filename #檢查文件的rwx讀寫執行權限 test -r $filename && authority='r' || authority='_' ?記得要用$把變量取出后才能使用 test -w $filename && authority=$authority'w' || authority=$authority'_' ? 注意是給authority重新復制,不可au=au+xx這樣!! test -x $filename && authority=$authority'x' || authority=$authority'_' echo "$authority" [ $a == $b ] && echo "equel" || echo "not" ? 可用中括號來進行變量的判斷 注意中括號兩側,判斷號兩側必須留空格!!! 如果變量時字符串的時候要用雙引號引起 如[ "$a" == "$b" ] ?否則 如a="nihao",$a=nihao, "$a"="nihao",如果沒雙引號的nihao就變成變量了 ?PS:shell中單引號中不會把變量的值調出,直接使用字面意思。 ?而雙引號就會引用出隱含意,比如\n就會生效?
sed "s/'/\"/g" sh05.sh ? 就可以將單引號換成單引號,而sed 's/\'/"/g' sh05.sh 就不可以,因為此時反斜杠轉義符無生效!! [ "$yn" == "n" -o "$yn" == "N" ] && echo "no" && exit 0 ? ? ?1,-o代表或 2,連續使用&&可延續判斷,如先輸出no再exit?
[ "$#" -lt "2" ] && echo "avgs too little" && exit 0 中括號比較不能用>這種符號 要用 gt,lt,eq,ne,ge,le?
if else 多重判斷語法 read -p "please input (Y/N):" yn if [ "$yn" == "y" ] || [ "$yn" == "Y" ]; then ? ? #記得中括號之間的內容一定要有空格!!!! ? ? IF后一定要有分號;!!! echo "yes" exit 0 elif [ "$yn" == "n" ] || [ "$yn" == "N" ]; then ?# if ?elif ?與中括號之間,一定要有空格!!! echo "no" exit 0 else echo "i don't know what you'v type in" fi?
testing=$(netstat | grep ":http") ?將輸出導入變量的語法!! date --date "20101018" +%s ?把日期字符串轉化為秒! ?注意字符串要引號括起, +%s前必須空格!! shell考慮空格的!!?
case語法 case $1 in ? #case 變量 in "hello") ? ? ? ?#字符串加右括號 echo "you type hello" ;; ? ? ? ?#雙分號代表此段結束 "") echo "you type nothing" ;; *) ? ? ? ? ? ? ?#星號代表default echo "else" ;; esac ? ? ? ? #反寫case代表case語法段結束?
function建立函數語法 function printIt() ?#function關鍵字 空格 函數名 括號 { ? ? ? ? ? ? ? ? ? ? ? ? #用雙大括號包圍函數體 echo "I just use function" } printIt ? ? ? ? ? ? ? ? #調用函數時,只需寫函數名,不用括號!!! printIt exit 0 函數名 參數一 參數二 。。。 $0文件名 $1參數一 $#參數個數 $@顯示所有參數 ? 循環loop read -p "please input a word,type yes to end:" word while [ "$word" != "yes" ] && [ "$word" != "YES" ] ? ?#條件可以用|| &&相連 ? ?do開始 done結束 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 doneforxunhuan
for animal in dog cat bird elephanp ? ? #語法跟python差不多, 后面的循環列表用空格隔離 do echo "this is ${animal}s" ? ? ? ? ? ? ?#這里要注意 如果想在變量后直接加字符 ?就用{}大括號括住再取出變量 done exit 0 users=$(cut -d ':' -f1 /etc/passwd) ?通過指令把多個值(多行)存到變量中 ?再用for循環多個值 for username in $users do id $username finger $username done?
seq 相當于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)) # ?錢雙括號來計算 done echo "$sum" for循環的第二種形式 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 調試 sh -x 很有用 把運行的語句打印出來 變量也顯示為當時的值 ? ? -n 僅顯示錯誤提示,不運行?
gcc makefile gcc -c file.c 產生.o文件 ? ? ? ? ? gcc -o filename file1.o file2.o ?產生filename.exe文件 main:hello.o hello2.o ? 前面的main是文件名而已,與exe文件名對應即可,然后列舉需要用到的。o文件 gcc -o main hello.o hello2.o ? 這里前面空格用TAB當更新了.c文件后,直接再下一次make命令就可以重新編譯
轉載于:https://www.cnblogs.com/iyjhabc/archive/2012/10/18/2987483.html
總結
以上是生活随笔為你收集整理的[读书笔记]鸟哥的LINUX私房菜 十三章 shell scripts的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zigbee 频谱波段
- 下一篇: nopCommerce的源代码结构和架构