资源描述
# 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
展开阅读全文