精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Shell腳本編程學(xué)習(xí)入門:Shell編程基礎(chǔ)

系統(tǒng) Linux
shell腳本編程入門學(xué)習(xí)基礎(chǔ),文中有很詳細的講解了shell腳本的應(yīng)用,希望能對你有幫助,一起來看。
Shell腳本編程學(xué)習(xí)入門是本文要介紹的內(nèi)容,我們可以使用任意一種文字編輯器,比如gedit、kedit、emacs、vi等來編寫shell腳本,它必須以如下行開始(必須放在文件的***行):
 
#!/bin/sh
...

注意:***使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改為tcsh,其他類似。

符號#!用來告訴系統(tǒng)執(zhí)行該sell腳本的程序,本例使用/bin/sh。編輯結(jié)束并保存后,如果要執(zhí)行該shell腳本,必須先使其可執(zhí)行:

chmod +x filename

此后在該shell腳本所在目錄下,輸入 ./filename 即可執(zhí)行該shell腳本。

Shell里的一些特殊符號

a []

shell離得函數(shù)

如果你寫過比較復(fù)雜的shell腳本,就會發(fā)現(xiàn)可能在幾個地方使用了相同的代碼,這時如果用上函數(shù),會方便很多。函數(shù)的大致樣子如下:

functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}

你需要在每個腳本的開始對函數(shù)進行聲明。

下面是一個名為xtitlebar的shell腳本,它可以改變終端窗口的名稱。這里使用了一個名為help的函數(shù),該函數(shù)在shell腳本中使用了兩次:

#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat << HELP
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
USAGE: xtitlebar [-h] "string_for_titelbar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "cvs"
HELP
exit 0
}
# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help
# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
# 

shell腳本中提供幫助是一種很好的編程習(xí)慣,可以方便其他用戶(和自己)使用和理解腳本。

命令行參數(shù)

我們已經(jīng)見過$* 和 $1, $2 ... $9 等特殊變量,這些特殊變量包含了用戶從命令行輸入的參數(shù)。迄今為止,我們僅僅了解了一些簡單的命令行語法(比如一些強制性的參數(shù)和查看幫助的-h選項)。但是在編寫更復(fù)雜的程序時,您可能會發(fā)現(xiàn)您需要更多的自定義的選項。通常的慣例是在所有可選的參數(shù)之前加一個減號,后面再加上參數(shù)值 (比如文件名)。

有好多方法可以實現(xiàn)對輸入?yún)?shù)的分析,但是下面的使用case表達式的例子無疑是一個不錯的方法。

#!/bin/sh
 
help()
{
   cat << HELP
   This is a generic command line parser demo.
   USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELP
   exit 0
}
  
while [ -n "$1" ]; do
case $1 in
   -h) help;shift 1;; # function help is called
   -f) opt_f=1;shift 1;; # variable opt_f is set
   -l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
   --) shift;break;; # end of options
   -*) echo "error: no such option $1. -h for help";exit 1;;
   *) break;;
esac
done
 
echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"

你可以這樣運行該腳本:

cmdparser -l hello -f -- -somefile1 somefile2

返回結(jié)果如下:

opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2

這個shell腳本是如何工作的呢?腳本首先在所有輸入命令行參數(shù)中進行循環(huán),將輸入?yún)?shù)與case表達式進行比較,如果匹配則設(shè)置一個變量并且移除該參數(shù)。根據(jù)unix系統(tǒng)的慣例,首先輸入的應(yīng)該是包含減號的參數(shù)。

shell腳本示例

一般編程步驟

現(xiàn)在我們來討論編寫一個腳本的一般步驟。任何優(yōu)秀的腳本都應(yīng)該具有幫助和輸入?yún)?shù)。寫一個框架腳本(framework.sh),該shell腳本包含了大多數(shù)腳本需要的框架結(jié)構(gòu),是一個非常不錯的主意。這樣一來,當(dāng)我們開始編寫新腳本時,可以先執(zhí)行如下命令:

cp framework.sh myscript

然后再插入自己的函數(shù)。

讓我們來看看如下兩個示例。

#p#

二進制到十進制的轉(zhuǎn)換

腳本 b2d 將二進制數(shù) (比如 1101) 轉(zhuǎn)換為相應(yīng)的十進制數(shù)。這也是一個用expr命令進行數(shù)學(xué)運算的例子:

#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
   cat << HELP
   
b2d -- convert binary to decimal
 
USAGE: b2d [-h] binarynum
 
OPTIONS: -h help text
 
EXAMPLE: b2d 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" | sed 's/ //g' | wc -c `
   # 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 -$numofcharminus1` 
   #原來的 rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`運行時出錯.
   #原因是cut從1開始計數(shù),應(yīng)該是cut -b 1-${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"
#

該shell腳本使用的算法是利用十進制和二進制數(shù)權(quán)值 (1,2,4,8,16,..),比如二進制"10"可以這樣轉(zhuǎn)換成十進制:

0 * 1 + 1 * 2 = 2

為了得到單個的二進制數(shù)我們是用了lastchar 函數(shù)。該函數(shù)使用wc –c計算字符個數(shù),然后使用cut命令取出末尾一個字符。Chop函數(shù)的功能則是移除***一個字符。

#p#

文件循環(huán)轉(zhuǎn)載

你可能有這樣的需求并一直都這么做:將所有發(fā)出郵件保存到一個文件中。但是過了幾個月之后,這個文件可能會變得很大以至于該文件的訪問速度變慢;下面的shell腳本 rotatefile 可以解決這個問題。這個腳本可以重命名郵件保存文件(假設(shè)為outmail)為outmail.1,而原來的outmail.1就變成了 outmail.2 等等...

#!/bin/sh
# vim: set sw=4 ts=4 et:

ver="0.1"
help()
{
   cat << HELP
   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[BR]
   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 9 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

這個shell腳本是如何工作的呢?在檢測到用戶提供了一個文件名之后,首先進行一個9到1的循環(huán);文件名.9重命名為文件名.10,文件名.8重命名為文件名. 9……等等。循環(huán)結(jié)束之后,把原始文件命名為文件名.1,同時創(chuàng)建一個和原始文件同名的空文件(touch $filen)

腳本調(diào)試

最簡單的調(diào)試方法當(dāng)然是使用echo命令。你可以在任何懷疑出錯的地方用echo打印變量值,這也是大部分shell程序員花費80%的時間用于調(diào)試的原因。Shell腳本的好處在于無需重新編譯,而插入一個echo命令也不需要多少時間。

shell也有一個真正的調(diào)試模式,如果腳本"strangescript"出錯,可以使用如下命令進行調(diào)試:

sh -x strangescript

7 上述命令會執(zhí)行該腳本,同時顯示所有變量的值。

shell腳本中還有一個不執(zhí)行腳本只檢查語法的模式,命令如下:

sh -n your_script

這個命令會返回所有語法錯誤。

我們希望你現(xiàn)在已經(jīng)可以開始編寫自己的shell腳本了,盡情享受這份樂趣吧!

【編輯推薦】

  1. 用SHELL腳本來防止SSH和vsftpd暴力破解
  2. Linux服務(wù)器安全初始化Shell腳本
  3. WMI中的Windows PowerShell腳本使用方法
  4. Linux BASH Shell腳本編程超級工具介紹
  5. 有關(guān)PowerShell腳本你必須知道的十個基本概念
責(zé)任編輯:程站 來源: Ubuntu中文
相關(guān)推薦

2020-06-17 10:42:54

shellshell腳本Linux

2019-04-24 15:20:44

Shell腳本編程Linux

2021-05-28 11:47:43

Linux運維Linux系統(tǒng)

2009-10-23 13:24:20

linux Shell

2020-10-21 11:55:44

Shell編程語言Linux

2010-06-23 15:55:36

Linux Bash

2009-12-25 09:55:18

LinuxShell編程Shell基本語法

2010-03-05 10:24:33

2010-03-05 10:50:17

2010-03-05 12:50:38

Linux shell

2010-03-05 11:18:52

Linux shell

2010-03-05 13:00:46

2010-03-05 11:58:52

2010-03-05 13:09:23

Linux shell

2010-03-05 13:19:23

2023-08-23 12:12:45

BashLinux

2009-12-25 09:49:32

LinuxShell編程運行Shell程序

2023-05-20 17:45:25

LinuxShell

2024-03-01 08:13:45

Shell編程解釋器

2009-12-18 09:54:10

Linux Shell
點贊
收藏

51CTO技術(shù)棧公眾號

久久免费手机视频| www.xxx亚洲| 天天射天天操天天干| 久久国产精品毛片| 中文字幕久久亚洲| 69久久精品无码一区二区| 啊啊啊久久久| 国产精品无人区| 国产精品久久久久久久免费大片| 国产女主播喷水视频在线观看| 91精品高清| 亚洲精品之草原avav久久| 婷婷中文字幕在线观看| 欧美私密网站| 亚洲黄色免费网站| 日韩国产一区久久| 国产成人在线一区二区| 日韩av三级在线| 日本亚洲精品| 久久综合狠狠综合久久激情 | 九九视频免费看| 国产精品嫩草影院在线看| 亚洲精品一区二区三区四区高清| 亚洲综合在线做性| 欧美a级片免费看| 国内精品偷拍| 日韩欧美亚洲国产精品字幕久久久| 可以在线看的黄色网址| www555久久| 国内不卡的二区三区中文字幕| 欧美怡春院一区二区三区| 波多野结衣影院| 亚洲精品69| 亚洲伦在线观看| 日韩欧美一区二区三区四区五区| 免费看av毛片| 国产成人午夜精品5599 | 中文字幕天堂在线| 国产农村妇女精品一区二区| 久久久久久18| 国产1区2区3区4区| 一区二区免费不卡在线| www.久久撸.com| 欧美色图17p| 国产精品嫩草影院在线看| 亚洲免费精彩视频| 久久久无码人妻精品一区| 久草精品视频| 亚洲的天堂在线中文字幕| 深夜视频在线观看| 国产精品17p| 亚洲国产精品99| 成人在线电影网站| 国内自拍欧美| 亚洲国产日韩欧美在线99| 久久久无码人妻精品无码| 婷婷综合国产| 精品国产91乱高清在线观看| 无码人妻少妇伦在线电影| 黄网在线观看| 久久精品夜色噜噜亚洲a∨| 欧美二区在线| 国产在线播放av| 国产人成亚洲第一网站在线播放 | 日韩欧美国产精品综合嫩v| 中文字幕亚洲一区二区三区五十路| 国产又粗又黄又猛| 欧美日韩一区二区综合| 日韩亚洲综合在线| 成人免费视频网站入口::| 欧美日本一区二区视频在线观看| 色综合久久悠悠| 精品视频久久久久| 麻豆成人在线| 国产精品一区二区久久久久| 国产一区二区波多野结衣| 国产一区欧美一区| 国产视频在线观看一区| 日韩欧美电影在线观看| 国产校园另类小说区| 亚洲图片小说在线| 污片视频在线免费观看| 久久久综合精品| 午夜精品一区二区三区四区| yellow91字幕网在线| 亚洲一级不卡视频| 粉嫩虎白女毛片人体| 小说区图片区亚洲| 亚洲精品一区二区三区蜜桃下载| 三级黄色片网站| 久久精品国产68国产精品亚洲| 欧美超级免费视 在线| 日韩成人一区二区三区| 青青国产91久久久久久| 91丝袜脚交足在线播放| 韩国精品视频| 亚洲一区免费观看| 污污视频网站免费观看| 综合激情久久| 91精品久久久久久蜜臀| 国产一二三四在线视频| 精品欧美视频| 亚洲香蕉成视频在线观看| 欧美日韩午夜剧场| 亚洲狠狠婷婷综合久久久| 日韩在线视频免费| 国产欧美日韩在线观看| 男人c女人视频| abab456成人免费网址| 精品毛片乱码1区2区3区| 中国女人特级毛片| 亚洲国产欧美国产综合一区| 国产裸体写真av一区二区 | 亚洲加勒比久久88色综合| 欧美性猛交xxxx乱大交少妇| 精品美女久久久| 欧美黑人xxxx| 一区不卡在线观看| 久久精品日产第一区二区三区高清版| 影音先锋成人资源网站| a成人v在线| 亚洲欧美国产制服动漫| 国产午夜视频在线播放| 国产裸体歌舞团一区二区| 色大师av一区二区三区| 亚洲性色av| 亚洲成人国产精品| 欧美日韩在线视频免费| 老司机精品福利视频| 国产一区精品视频| 日本性爱视频在线观看| 欧美精品色综合| 精品伦精品一区二区三区视频密桃| 销魂美女一区二区三区视频在线| 国产精品一区二区在线观看| 色www永久免费视频首页在线 | 一区二区在线观看视频在线观看| 男女男精品视频站| 精品视频日韩| 国产福利视频一区二区| 奇米影视888狠狠狠777不卡| 天天亚洲美女在线视频| 中文字幕第九页| 国精品一区二区| 国产伦理一区二区三区| 波多野结衣中文在线| 精品国产乱码久久久久久影片| 午夜剧场免费在线观看| 国产麻豆精品久久一二三| 香蕉视频在线网址| av剧情在线观看| 日韩精品一区二区三区四区视频| 成熟的女同志hd| 国产成人精品影视| 欧妇女乱妇女乱视频| 97视频一区| 91av在线网站| 一级黄色录像大片| 中文一区二区完整视频在线观看| 亚洲最大综合网| 小处雏高清一区二区三区| 91综合免费在线| 免费在线看a| 日韩三级.com| 日本少妇毛茸茸高潮| 97se亚洲国产综合自在线观| 夜夜爽www精品| 亚洲精品aaa| 欧美大码xxxx| 污视频在线免费观看| 色噜噜久久综合| 精品国产大片大片大片| 国产成a人亚洲精品| 五月天亚洲综合| www.欧美视频| 国内精品免费午夜毛片| 一级片一区二区三区| 亚洲精品水蜜桃| 亚洲色图14p| 日本不卡在线视频| 大片在线观看网站免费收看| 欧美国产极品| 国产精品亚洲欧美导航| 牛牛精品视频在线| 91精品国产日韩91久久久久久| 69xx绿帽三人行| 91玉足脚交白嫩脚丫在线播放| 99久久激情视频| 自产国语精品视频| 鲁片一区二区三区| 丁香高清在线观看完整电影视频| 亚洲精品v欧美精品v日韩精品| www.亚洲激情| 亚洲高清视频在线| 青青草华人在线视频| 国产不卡在线视频| 韩国视频一区二区三区| 一区二区亚洲精品| 色综合电影网| 极品国产人妖chinesets亚洲人妖| 国产精品稀缺呦系列在线| 岛国毛片av在线| 丝袜美腿亚洲一区二区| 凸凹人妻人人澡人人添| 制服丝袜成人动漫| 人妻 日韩精品 中文字幕| 亚洲欧美日韩在线不卡| 国产精品一二三区在线观看| 国产一区二区精品久久99| 日韩av在线综合| 欧美午夜在线| 国产精品99久久久久久大便| 你微笑时很美电视剧整集高清不卡| 欧美亚洲视频在线观看| 菠萝菠萝蜜在线视频免费观看 | av电影在线观看| 欧美在线一区二区三区| 日本在线观看视频网站| 亚洲色图19p| 国产黄色录像视频| 久久色视频免费观看| bl动漫在线观看| 国产成人免费视频一区| jizzzz日本| 热久久免费视频| 日本精品www| av成人毛片| 欧美一级免费播放| 欧美人成在线| a级黄色片免费| 一区二区不卡| 国产对白在线播放| 国产精品成人a在线观看| 先锋在线资源一区二区三区| 美女亚洲一区| 另类小说综合网| 日韩精品亚洲aⅴ在线影院| 国产国语刺激对白av不卡| a天堂资源在线| 欧美人成在线视频| 亚洲欧美成人影院| 九九九久久久久久| 99福利在线| 久久99视频免费| 国产第一页在线视频| 欧美夫妻性生活视频| 日韩成人伦理| 久久人人97超碰精品888| 国产精品蜜臀| 91av在线不卡| 欧洲一级精品| 国产精品久久久久久久久久尿| 欧美成人黑人| 国产精品午夜一区二区欲梦| 中文字幕日本一区| 亚洲综合在线做性| 北条麻妃一区二区三区在线| 国产欧美一区二区在线播放| 欧美一区 二区| 欧美精品久久| 日韩国产一区二区| 水蜜桃在线免费观看| 国产精品www994| av动漫在线看| 日韩电影一区二区三区| 亚洲午夜精品一区| 国产suv精品一区二区6| 欧美精品黑人猛交高潮| 国产清纯白嫩初高生在线观看91 | 真实乱视频国产免费观看| 国产欧美日韩中文久久| √天堂中文官网8在线| 一级做a爱片久久| 天天干天天干天天操| 欧美亚洲综合久久| 国产丝袜在线视频| 亚洲国产成人91精品| 黄色片在线播放| 另类图片亚洲另类| 黄色在线网站噜噜噜| 国产精品永久在线| 国产精品高潮呻吟久久久久| 日本精品免费| 国内视频精品| 91国产精品视频在线观看| 国产福利一区在线| a级片在线观看| 亚洲狼人国产精品| 蜜臀精品一区二区三区| 91精品国产色综合久久不卡电影| 亚洲 小说区 图片区 都市| 日韩有码在线视频| 天堂电影一区| 97在线电影| 精品一区二区三区中文字幕老牛| 欧美另类videos| 日韩国产精品久久| 免费黄色a级片| 国产精品美女久久久久aⅴ| 国产一级做a爱免费视频| 亚洲女同女同女同女同女同69| 国产成人精品av久久| 欧美丝袜自拍制服另类| 午夜视频1000| 久久中文字幕在线| 成人视屏在线观看| 国产视频在线观看一区| 亚洲一区在线| 欧美大尺度做爰床戏| 99久久99久久精品免费看蜜桃| 少妇高潮惨叫久久久久| 欧美性猛交视频| www.久久久久久| 久久精品99久久久久久久久| 国产精品亚洲一区二区三区在线观看| caoporen国产精品| 欧美3p在线观看| www.超碰com| 久久影院午夜片一区| 精品亚洲永久免费| 欧美精品乱码久久久久久 | 久久草在线视频| 国产午夜精品视频一区二区三区| 奇米影视一区二区三区小说| 风间由美一二三区av片| 亚洲国产精品一区二区久久恐怖片| 亚洲自拍偷拍另类| 色狠狠av一区二区三区香蕉蜜桃| 免费电影日韩网站| 久久久久资源| 国产日韩1区| 女同毛片一区二区三区| 亚州成人在线电影| 乱精品一区字幕二区| 欧美日本国产在线| 精品国产亚洲一区二区三区在线| 亚洲综合五月天| 精品亚洲aⅴ乱码一区二区三区| 变态另类ts人妖一区二区| 一本色道久久综合亚洲91| 日韩av高清在线| 日本成人免费在线| 亚州综合一区| 国产精品欧美激情在线观看| 91免费版在线| 无码人妻精品一区二区50| 亚洲人a成www在线影院| 麻豆传媒在线观看| 国产日韩在线精品av| 国产精品久久久久久| 91亚洲精品久久久蜜桃借种| 国产精品久久久久一区二区三区共| 中文字幕无线码一区| www.亚洲一区| 国产精品777777在线播放| 国产午夜精品视频一区二区三区| 国产精品羞羞答答xxdd| 免费观看一级视频| 日韩成人av在线播放| 精品3atv在线视频| 一区二区不卡在线| 国产精品中文有码| 国产精品19乱码一区二区三区| 亚洲激情小视频| 日韩成人亚洲| 亚洲一区二区在线看| 国产一区二区三区黄视频 | 色综合久久久久综合| 国产高清在线看| 成人在线一区二区| 亚洲视频免费| 熟女俱乐部一区二区| 欧美日本视频在线| 懂色av一区| 日本中文不卡| 国产成人亚洲精品狼色在线| 国产精品自拍99| 中文字幕亚洲第一| 亚洲一级大片| 成人在线观看黄| 一区二区欧美在线观看| 亚洲人妻一区二区三区| 国产乱人伦真实精品视频| 好吊一区二区三区| 少妇无套高潮一二三区| 日韩一区二区三区免费观看 | 91精品视频在线免费观看| 伊人久久婷婷| 内射毛片内射国产夫妻| 日韩精品资源二区在线| 亚洲天堂手机| 8x8x华人在线| 久久久不卡影院| 性一交一乱一精一晶| 国产精品jvid在线观看蜜臀| 一本精品一区二区三区| www.狠狠爱| 欧美mv日韩mv国产网站app| 香蕉成人影院| 成人性免费视频|