收藏 分销(赏)

Shell脚本例子集合.doc

上传人:快乐****生活 文档编号:4333200 上传时间:2024-09-06 格式:DOC 页数:34 大小:154.51KB 下载积分:12 金币
下载 相关 举报
Shell脚本例子集合.doc_第1页
第1页 / 共34页
Shell脚本例子集合.doc_第2页
第2页 / 共34页


点击查看更多>>
资源描述
# vi xx.sh 退出并保存 # chmod +x xx.sh # ./xx.sh -2.调试脚本的方法 # bash -x xx.sh就可以调试了. -1.配置secureCRT的设置(我用的是6.2.3 build313版本,汉化版) 选项->会话选项(S)...->终端->仿真->终端(T)->把VT100改成Xterm->点中ANSI 颜色(A)和使用颜色方案(U)复选框. 这样就有颜色显示了. 选项->会话选项(S)...->终端->外观->字符编码(H)->从Default变到UTF-8. 这样就有中文显示了. 1.写一个脚本,执行后,打印一行提示"Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值.直到用户输入"end"停止. # vi show_var.sh 脚本内容: #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 命令保存后退出,并执行: # chmod +x show_var.sh # ./show_var.sh please input a number: 1 var is 1 please input a number: s var is s please input a number: end # 2.写一个脚本,测试位置参数 # vi param.sh 脚本内容: #!/bin/bash #test shell echo $0 echo $1 echo $2 echo $? echo $* echo $# 命令保存后退出,并执行: # chmod +x param.sh # ./param.sh yema Bhanv edu network ./param.sh //程序名称 Yema //第一个参数 Bhanv //第二个参数 0 //程序执行结果 yema Bhanv edu network //传递参数所组成的字符串 4 //参数个数 3.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件. # vi tar_gz_bz2.sh 脚本内容: #!/bin/sh case ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type" esac 命令保存后退出,并执行: # chmod +x tar_gz_bz2.sh # ./tar_gz_bz2.sh # touch "helloA" > a.txt //写一个测试用的文件 # tar czvf a.tar.gz a.txt //把a.txt压缩成tar.gz文件 # rm -rf a.txt //删除a.txt来测试脚本 # ls a.* a.tar.gz # ./tar_gz_bz2.sh a.tar.gz # ls a.* a.tar.gz a.txt //验证了正确性 # touch "helloB" > b.txt //写一个测试用的文件 # tar cjvf b.tar.bz2 b.txt //把b.txt压缩成tar.bz2文件 # rm -rf b.txt //删除b.txt来测试脚本 # ls b.* b.tar.bz2 # ./tar_gz_bz2.sh b.tar.bz2 # ls b.* b.tar.bz2 b.txt //验证了正确性 # rm -rf a.txt a.tar.gz //删除测试用的文件 # rm -rf b.txt b.tar.bz2 //删除测试用的文件 4.小棍子显示 # vi showstick.sh #!/bin/bash i=0 while [ $i -lt 10 ] do for j in '-' '\\' '|' '/' do echo -ne "\033[1D$j" usleep 50000 done ((i++)) done 保存 # chmod +x showstick.sh # ./showstick.sh 看效果. 5.显示类似wget 的进度 # vi showwget.sh #!/bin/bash i=0 while [ $i -lt 10 ] do for j in '-' '\\' '|' '/' do echo -ne "\033[1D$j" usleep 50000 done ((i++)) done 保存 # chmod +x showwget.sh # ./showwget.sh 看效果. 6.定义loop的变量 1 2 3 4 5是变量列表 # vi forlist.sh #!/bin/bash #for with list for loop in 1 2 3 4 5 do echo ${loop} done 保存 # chmod +x forlist.sh # ./forlist.sh 看效果. 7.读取文件中的每串字符,去掉了回车或者空格,输出每行就显示一个字符串. 编写文件var.txt # vi var.txt 1 22 3 4 5 6 保存 # vi listfile.sh #!/bin/bash for loop in `cat var.txt` do echo ${loop} done 保存 # chmod +x listfile.sh # ./listfile.sh 看效果. 8.编写一个脚本自动生成一个C类IP地址段 IP地址段网络部分由用户指定 # vi ipaddr.sh #!/bin/bash for ip in `seq 1 254` do echo ${1}.${ip} done 保存 # chmod +x ipaddr.sh # ./ipaddr.sh 192.168.1 看效果. 9.编写一个脚本自动生成一个C类IP地址段 IP地址段网络部分由用户指定,主机结束部分由用户指定 # vi ipaddr2.sh #!/bin/bash for ip4 in `seq 1 ${2}` do echo ${1}.${ip4} done 保存 # chmod +x ipaddr2.sh # ./ipaddr2.sh 192.168.1 100 看效果. 10.编写一个脚本自动生成一个C类IP地址段 IP地址段网络部分由用户指定,主机结束部分由用户指定 # vi ipaddr3.sh #!/bin/bash for ip3 in `seq 1 5` do for ip4 in `seq 1 ${2}` do echo ${1}.${ip3}.${ip4} done done 保存 # chmod +x ipaddr3.sh # ./ipaddr3.sh 192.168 2 100 看效果. 11.编写一个脚本测试while的性能 # vi menu-while.sh #!/bin/bash while [ "1" == "1" ] do clear echo "-------menu-----" echo "1) Show Time" echo "2) CPU load" echo "3) Memory free" echo "0) Exit" echo "---------------" echo -n "Enter you chose [0-3]:" read Chose case ${Chose} in 0) exit ;; 1) date +%T;; 2) uptime | awk -F '[,]' '{print $1}';; 3) free -m | awk '$1=="Mem:"{print $4}';; *) echo "This is not between 0-3." ;; esac echo -n "Do you contine [y/n]:" read contine if [ "${contine}" == "n" -o "${contine}" == "N" ] then exit fi done 保存 # chmod +x menu-while.sh # ./menu-while.sh 看效果. 12.echo颜色显示 # vi showcolor.sh #!/bin/bash echo -e "\033[40;35mHell,world! \033[0m" echo "Hello,world" 保存 # chmod +x showcolor.sh # ./showcolor.sh 看效果. 13.sort排序 # vi showsort.sh #!/bin/bash sort -k3 -n -r -t: /etc/passwd 保存 # chmod +x showsort.sh # ./showsort.sh 看效果. 14.wc统计字数 # vi showwc.sh #!/bin/bash wc /etc/passwd 保存 # chmod +x showwc.sh # ./showwc.sh 看效果. 15.diff判断文件的差异 # vi a.txt Hello World 保存 # vi b.txt Hello You 保存 # vi showdiff.sh #!/bin/bash diff a.txt b.txt 保存 # chmod +x showdiff.sh # ./showdiff.sh 看效果. 15.diff判断文件的差异 # vi showawk.sh #!/bin/bash awk -F: '{print $1,$3}' /etc/passwd 保存 # chmod +x showawk.sh # ./showawk.sh 看效果. 16.test判断文件的差异 # vi showtest.sh #!/bin/bash #中间是a与操作,则都为0才得0 #中间是o或操作,则有一真则真0 test -e /etc/passwd -a -e /etc/shadow echo $? test -e /etc/passwd -o -e /etc/groups echo $? 保存 # chmod +x showtest.sh # ./showtest.sh 看效果. 17.输入判断 # vi input.sh #!/bin/bash #input test echo -n "Enter your name:" read name #did the user just hit return if [ "${name}" == "" ] then echo "You did not enter any information" else echo "Your name: ${name}" fi 保存 # chmod +x input.sh # ./input.sh 看效果. 18.文件拷贝 # vi filecopy.sh #!/bin/bash #file copy # 2>/dev/null 丢掉错误提示 if cp /etc/passwd passwd.bak 2>/dev/null then echo "Good Copy!" else echo "`basename $0`: error,could not copy" fi 保存 # chmod +x filecopy.sh # ./filecopy.sh 看效果. 19.case选择效果 # vi showcase.sh #!/bin/bash #case select echo -n "enter a number from 1 to 5:" read NUM case $NUM in 1) echo "you select 1" ;; 2) echo "you select 2" ;; 3) echo "you select 3" ;; 4) echo "you select 4" ;; 5) echo "you select 5" ;; *) echo "basename $This is not between 1 and 5" esac 保存 # chmod +x showcase.sh # ./showcase.sh 看效果. 20.case选择效果 学生的考试成绩是0-100分,在85以上的要提示you are the best!,在70-84显示you get a good mark! ,在60-74的显示come on!,60分以下显示You must study hard! # vi showpoint.sh #!/bin/bash echo -n "please input your mark:" read mark case $mark in # 100、90-99、85-89 100|9[0-9]|8[5-9]) echo "you are the best!";; # 80-84、70-79 8[0-4]|7[0-9]) echo "you get a good mark!";; # 70-74、60-69 7[0-4]|6[0-9]) echo "come on!";; # 00-59 [0-5][0-9]) echo "You must study hard!";; esac 保存 # chmod +x showpoint.sh # ./showpoint.sh 看效果. 21.用echo显示颜色 # vi showcolors.sh #!/bin/bash T='gYw' # The test text echo echo "default 40m 41m 42m 43m 44m 45m 46m 47m" ## FGs 为前景(foreground), BG 为背景(background) for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' ' 36m' '1;36m' ' 37m' '1;37m' do FG=$(echo $FGs|tr -d ' ') echo -en " $FGs \033[$FG $T " for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en " \033[$FG\033[$BG $T \033[0m" done echo done echo 保存 # chmod +x showcolors.sh # ./showcolors.sh 看效果. 22.改变终端窗口的名称.这里使用了一个名为help的函数,该函数在脚本中使用了两次: # vi xtitlebar.sh #!/bin/bash # 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 "\033[40;35m$1\033[0m" 保存 # chmod +x xtitlebar.sh # ./xtitlebar.sh 看效果. 23.shift用法 # vi showshift.sh #!/bin/bash until [ $# -eq 0 ] do echo "第一个参数为: $1 参数个数为: $#" shift done 保存 # chmod +x showshift.sh # ./showshift.sh 1 2 3 4 第一个参数为: 1 参数个数为: 4 第一个参数为: 2 参数个数为: 3 第一个参数为: 3 参数个数为: 2 第一个参数为: 4 参数个数为: 1 看效果. 来源于网络,回归于网络. 我的邮箱:happy.every.day@ QQ:48399956 快乐! 2010年9月30日 对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:3 merryboy 等 级: #1楼 得分:0回复于:2010-09-30 16:22:0324.shift用法2 # vi showshift2.sh #!/bin/bash if [ $# -eq 0 ] then echo "Usage:x_shift2.sh 参数" exit 1 fi sum=0 until [ $# -eq 0 ] do sum=`expr $sum + $1` shift done echo "sum is: $sum" 保存 # chmod +x showshift2.sh # ./showshift2.sh 10 20 15 sum is: 45 看效果. 25.函数定义,调用 # vi showfunction.sh #!/bin/bash message() { echo "message" } let i=1 while [ $i -le 3 ] do message let i=$i+1 done 保存 # chmod +x showfunction.sh # ./showfunction.sh 看效果. 26.函数定义,调用,参数传递,这里主要实现数的乘方计算. # vi showfunction2.sh #!/bin/bash power() { x=$1 y=$2 count=1 result=1 while [ $count -le $y ] do result=`expr $result \* $x` count=`expr $count + 1` done return $result } echo "Enter two numbers" read num1 num2 power $num1 $num2 answer=$? echo "$num1 to $num2 is $answer" 保存 # chmod +x showfunction2.sh # ./showfunction2.sh Enter two numbers 2 3 2 to 3 is 8 看效果. 27.函数定义,调用,参数传递,这里主要实现数的乘方计算,使用递归调用. # vi showfunction3.sh #!/bin/bash power() { x=$1 y=$2 if [ $y -eq 1 ] then return $x else y=`expr $y - 1` power $x $y result=`expr $? \* $x` return $result fi } echo "Enter two numbers" read num1 num2 power $num1 $num2 answer=$? echo "$num1 to $num2 is $answer" 保存 # chmod +x showfunction3.sh # ./showfunction3.sh Enter two numbers 3 2 3 to 2 is 9 看效果. 如果你输入 4 5看看结果是什么 Enter two numbers 4 5 4 to 5 is 0 为什么是0,不是1024,我估计是计算溢出了. 28.局部变量全局变量的测试. 默认情况下,所有函数的变量都是全局变量.你可以用typeset去声明一个局部变量 # vi showfunction4.sh #!/bin/bash easy() { typeset a a=`expr 30 ` b=`expr 30 ` echo "easy a is " $a echo "easy b is " $b } a=10 b=20 easy $a $b echo "global a is " $a echo "global b is " $b 保存 # chmod +x showfunction4.sh # ./showfunction4.sh easy a is 30 easy b is 30 global a is 10 global b is 30 看效果. 29.如果要在脚本中多次使用函数,可以把它放在一个函数目录中,像一个普通文件一样,使用的时候把它放在脚本开始的地方 模式: . functionfile ... 具体例子 # vi power.sh #!/bin/bash power() { x=$1 y=$2 if [ $y -eq 1 ] then return $x else y=`expr $y - 1` power $x $y result=`expr $? \* $x` return $result fi } 保存 # vi showfunction5.sh #!/bin/bash . power.sh echo "Enter two numbers" read num1 num2 power $num1 $num2 answer=$? echo "$num1 to $num2 is $answer" 保存 # chmod +x power.sh # chmod +x showfunction5.sh # ./showfunction5.sh Enter two numbers 2 3 2 to 3 is 8 看效果. 30. 函数使用 # vi showfunction6.sh #!/bin/bash # file name "showfunction6.sh" function nihao() { echo -n "nice to meet you ! " } function mingzi() { echo "小桥流水人家" } function out(){ echo "即将退出..." echo "3秒后退出!" sleep 1 echo -n "." sleep 1 echo -n "." sleep 1 echo "." exit } nihao mingzi out 保存 # chmod +x showfunction6.sh # ./showfunction6.sh 看效果. 31.实现对输入参数的分析,但是下面的使用case表达式的例子无疑是一个不错的方法. # vi param.sh #!/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" 你可以这样运行该脚本: # chmod +x param.sh # ./param.sh -l hello -f -- -somefile1 somefile2 返回结果如下: opt_f is 1 opt_l is hello first arg is -somefile1 2nd arg is somefile2 这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数.根据unix系统的惯例,首先输入的应该是包含减号的参数. 32. DONE OK PASSED FAILED WARNING 的shell颜色控制显示(这个是参考 文档,自己摸索学会的) # vi colorbase.sh #!/bin/sh BOOTUP=color # 第一设置 BOOTUP 变量,默认就是 color RES_COL=60 # 第二设置设置在屏幕的第几列输出后面的 "[ xxx ]" ,默认是第60列 MOVE_TO_COL="echo -en \\033[${RES_COL}G" # MOVE_TO_COL 是用于打印 "OK" 或者 "FAILED" ,或者 "PASSED" ,或者 "WARNING" 之前的部分,不含 "[" SETCOLOR_SUCCESS="echo -en \\033[1;32m" # SETCOLOR_SUCCESS 设置后面的字体都为绿色 SETCOLOR_FAILURE="echo -en \\033[1;31m" # SETCOLOR_FAILURE 设置后面将要输出的字体都为红色 SETCOLOR_WARNING="echo -en \\033[1;33m" # SETCOLOR_WARNING 设置后面将要输出的字体都为黄色 SETCOLOR_NORMAL="echo -en \\033[0;39m" # SETCOLOR_NORMAL 设置后面输出的字体都为白色(默认) echo_success() { # 下面是 echo_success 部分 [ "$BOOTUP" = "color" ] && $MOVE_TO_COL # 首先是打印 "[" 之前的空格 echo -n "[" # 然后打印 "[" [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS # 设置字体为红色 echo -n $" OK " # 打印 OK [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL # 返回字体为白色 echo -n "]" # 打印 "]" echo -ne "\r" # 换行. return 0 # 返回 0,其他一律返回 1 } echo_done() { # 下面是 echo_success 部分 [ "$BOOTUP" = "color" ] && $MOVE_TO_COL # 首先是打印 "[" 之前的空格 echo -n "[" # 然后打印 "[" [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS # 设置字体为红色 echo -n $" DONE " # 打印 DONE [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL # 返回字体为白色 echo -n "]" # 打印 "]" echo -ne "\r" # 换行. return 0 # 返回 0,其他一律返回 1 } echo_failure() { [ "$BOOTUP" = "color" ] && $MOVE_TO_COL echo -n "[" [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE echo -n $" FAILED " [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL echo -n "]" echo -ne "\r" return 1 } echo_passed() { [ "$BOOTUP" = "color" ] && $MOVE_TO_COL echo -n "[" [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING echo -n $" PASSED " [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL echo -n "]" echo -ne "\r" return 1 } echo_warning() { [ "$BOOTUP" = "color" ] && $MOVE_TO_COL echo -n "[" [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING echo -n $" WARNING " [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服