亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 編程設計 > 正文

兩個很詳細的shell 實例代碼

2020-01-31 16:13:13
字體:
來源:轉載
供稿:網友
兩個很詳細的shell 實例
一般編程步驟
  現在我們來討論編寫一個腳本的一般步驟。任何優秀的腳本都應該具有幫助和輸入參數。并且寫一個偽腳本(framework.sh),該腳本包含了大多數腳本都需要的框架結構,是一個非常不錯的主意。這時候,在寫一個新的腳本時我們只需要執行一下copy命令:
cp framework.sh myscript
  然后再插入自己的函數。
  讓我們再看兩個例子:
  二進制到十進制的轉換
  腳本 b2d 將二進制數 (比如 1101) 轉換為相應的十進制數。這也是一個用expr命令進行數學運算的例子:
復制代碼 代碼如下:

#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
 cat < b2h -- convert binary to decimal
USAGE: b2h [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2h 111010
will return 58
HELP
 exit 0
}
error()
{
  # print an error and exit
  echo "$1"
  exit 1
}
lastchar()
{
  # return the last character of a string in $rval
  if [ -z "$1" ]; then
    # empty string
    rval=""
    return
  fi
  # wc puts some space behind the output this is why we need sed:
  numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
  # now cut out the last char
  rval=`echo -n "$1" | cut -b $numofchar`
}
chop()
{
  # remove the last character in string and return it in $rval
  if [ -z "$1" ]; then
    # empty string
    rval=""
    return
  fi
  # wc puts some space behind the output this is why we need sed:
  numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
  if [ "$numofchar" = "1" ]; then
    # only one char in string
    rval=""
    return
  fi
  numofcharminus1=`expr $numofchar "-" 1`
  # now cut all but the last char:
  rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
}
while [ -n "$1" ]; do
case $1 in
  -h) help;shift 1;; # function help is called
  --) shift;break;; # end of options
  -*) error "error: no such option $1. -h for help";;
  *) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
  lastchar "$binnum"
  if [ "$rval" = "1" ]; then
    sum=`expr "$weight" "+" "$sum"`
  fi
  # remove the last position in $binnum
  chop "$binnum"
  binnum="$rval"
  weight=`expr "$weight" "*" 2`
done
echo "binary $binnumorig is decimal $sum"
#

  該腳本使用的算法是利用十進制和二進制數權值 (1,2,4,8,16,..),比如二進制"10"可以這樣轉換成十進制:
0 * 1 + 1 * 2 = 2
  為了得到單個的二進制數我們是用了lastchar 函數。該函數使用wc ?c計算字符個數,然后使用cut命令取出末尾一個字符。Chop函數的功能則是移除最后一個字符。
  文件循環程序
  或許您是想將所有發出的郵件保存到一個文件中的人們中的一員,但是在過了幾個月以后,這個文件可能會變得很大以至于使對該文件的訪問速度變慢。下面的腳本rotatefile 可以解決這個問題。這個腳本可以重命名郵件保存文件(假設為outmail)為outmail.1,而對于outmail.1就變成了outmail.2 等等等等...
復制代碼 代碼如下:

#!/bin/sh
# vim: set sw=4 ts=4 et:
ver="0.1"
help()
{
  cat < rotatefile -- rotate the file name
USAGE: rotatefile [-h] filename
OPTIONS: -h help text
EXAMPLE: rotatefile out
This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1
and create an empty out-file
The max number is 10
version $ver
HELP
  exit 0
}
error()
{
  echo "$1"
  exit 1
}
while [ -n "$1" ]; do
case $1 in
  -h) help;shift 1;;
  --) break;;
  -*) echo "error: no such option $1. -h for help";exit 1;;
  *) break;;
esac
done
# input check:
if [ -z "$1" ] ; then
error "ERROR: you must specify a file, use -h for help"
fi
filen="$1"
# rename any .1 , .2 etc file:
for n in Array 8 7 6 5 4 3 2 1; do
  if [ -f "$filen.$n" ]; then
    p=`expr $n + 1`
    echo "mv $filen.$n $filen.$p"
    mv $filen.$n $filen.$p
  fi
done
# rename the original file:
if [ -f "$filen" ]; then
  echo "mv $filen $filen.1"
  mv $filen $filen.1
fi
echo touch $filen
touch $filen

  這個腳本是如何工作的呢?在檢測用戶提供了一個文件名以后,我們進行一個Array到1的循環。文件Array被命名為10,文件8重命名為Array等等。循環完成之后,我們將原始文件命名為文件1同時建立一個與原始文件同名的空文件。
調試
  最簡單的調試命令當然是使用echo命令。您可以使用echo在任何懷疑出錯的地方打印任何變量值。這也是絕大多數的shell程序員要花費80%的時間來調試程序的原因。Shell程序的好處在于不需要重新編譯,插入一個echo命令也不需要多少時間。
  shell也有一個真實的調試模式。如果在腳本"strangescript" 中有錯誤,您可以這樣來進行調試:
sh -x strangescript
  這將執行該腳本并顯示所有變量的值。
  shell還有一個不需要執行腳本只是檢查語法的模式??梢赃@樣使用:
sh -n your_script
  這將返回所有語法錯誤。
  我們希望您現在可以開始寫您自己的shell腳本,希望您玩得開心。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品福利在线| 亚洲欧美日韩天堂| 国产一区二中文字幕在线看| 久久精品国产亚洲精品| 亚洲视频在线看| 亚洲精品免费一区二区三区| 国产精品99久久久久久久久久久久| 色伦专区97中文字幕| 亚洲欧洲一区二区三区在线观看| 国产精品aaa| 中文字幕视频在线免费欧美日韩综合在线看| 欧美日韩国产一区二区三区| 亚洲成人精品久久久| 国产91精品高潮白浆喷水| 久久综合久久88| 欧美激情国产日韩精品一区18| 亚洲经典中文字幕| 欧美性20hd另类| 久久久久久久成人| 亚洲精品videossex少妇| 国产精品中文久久久久久久| 亚洲大尺度美女在线| 成人精品久久一区二区三区| 在线精品播放av| 成人做爽爽免费视频| 久久亚洲春色中文字幕| 欧美裸体男粗大视频在线观看| 亚洲日本成人女熟在线观看| 国产91热爆ts人妖在线| 国产欧美va欧美va香蕉在线| 欧美高清在线观看| 精品日韩视频在线观看| 久久免费视频这里只有精品| 亚洲成人精品久久久| 欧美刺激性大交免费视频| 国产91精品高潮白浆喷水| 国产成人鲁鲁免费视频a| 日韩成人av网址| 欧美电影免费播放| 精品高清美女精品国产区| 在线看片第一页欧美| 亚洲性无码av在线| 91热福利电影| 国产成人久久久| 亚洲欧美中文另类| 国产精品久久久久秋霞鲁丝| 一区二区三区回区在观看免费视频| 亚洲三级免费看| 欧美重口另类videos人妖| 日韩av一区在线| 国产裸体写真av一区二区| 国产视频精品xxxx| 久久影院在线观看| 欧美视频在线观看免费| 亚洲欧美在线看| 中文字幕欧美在线| 欧美日韩免费区域视频在线观看| 国产福利视频一区| 91亚洲精品一区二区| 国产精品第二页| 91久久精品在线| 日韩精品极品视频免费观看| 国内免费久久久久久久久久久| 国产日韩欧美在线| 97久久超碰福利国产精品…| 中文字幕精品影院| 美女黄色丝袜一区| 日本精品性网站在线观看| 亚洲精品免费av| 日韩欧美在线免费| 97免费视频在线| 九九精品在线观看| 国产精品一区二区久久国产| 97在线观看视频| 亚洲一区中文字幕| 成人免费网站在线| 欧美极品欧美精品欧美视频| 欧美日韩国产色| 亚洲成人精品视频在线观看| 国产精品欧美日韩久久| 国产精品久久婷婷六月丁香| 亚洲japanese制服美女| 国产精品女人久久久久久| 美女久久久久久久| 在线激情影院一区| 午夜精品一区二区三区视频免费看| 亚洲天堂av在线免费观看| 中文精品99久久国产香蕉| 色综合伊人色综合网站| 亚洲无亚洲人成网站77777| 57pao精品| 福利精品视频在线| 精品中文字幕视频| 国产手机视频精品| 97成人在线视频| 久久久久久一区二区三区| 疯狂做受xxxx欧美肥白少妇| 国产亚洲精品久久久久久777| 亚洲影视九九影院在线观看| 久久精品这里热有精品| 欧美视频中文字幕在线| 97精品在线视频| 国产成人精品久久二区二区91| 日韩网站免费观看| 欧美激情久久久久久| 国产一区二区黄| 亚洲欧美另类人妖| 国产亚洲成精品久久| 国产一区二区三区高清在线观看| 国产精品视频在线播放| 日韩欧美福利视频| 日韩专区在线观看| 美女999久久久精品视频| 成人网页在线免费观看| 欧美乱人伦中文字幕在线| 性欧美激情精品| 亚洲自拍中文字幕| 国产精品日韩在线播放| 欧美黄色片免费观看| 精品久久久久久久久久| 久久精品电影一区二区| 国语自产精品视频在线看| 亚洲人午夜色婷婷| 91久久久久久久| 国产精品爽爽ⅴa在线观看| 国产91精品久久久久| 国内精品中文字幕| 欧美剧在线观看| 人体精品一二三区| 亚洲成人免费网站| 91免费看片在线| 国产精品福利网| 亚洲成人黄色在线观看| 亚洲精品电影网在线观看| 日韩电影中文字幕在线观看| 成人日韩在线电影| 国产精品一久久香蕉国产线看观看| 久久精品人人做人人爽| 国产精品视频一区二区高潮| 91亚洲永久免费精品| 韩国福利视频一区| 久久6精品影院| 亚洲电影第1页| 国产精品第七十二页| 黑人巨大精品欧美一区二区一视频| 日日狠狠久久偷偷四色综合免费| 国产精品久久久久久婷婷天堂| 精品美女国产在线| 欧美亚洲免费电影| 亚洲色图五月天| 国精产品一区一区三区有限在线| 久久精品青青大伊人av| 日韩电影在线观看永久视频免费网站| 亚洲欧美日韩国产精品| 欧美不卡视频一区发布| 久久99青青精品免费观看| 精品国产乱码久久久久久婷婷| 久久久人成影片一区二区三区| 欧美日韩国产精品专区| 亚洲精品国产精品久久清纯直播| 主播福利视频一区| 韩国欧美亚洲国产| 美女福利视频一区| 欧美日韩亚洲91|