linux shell脚本实例--(摘抄)
(2010-12-07 23:37:27)分类: 计算机知识 |
鸟哥的私房菜
1 请建立一支 script ,当你执行该 script 的时候,该
script 可以显示∶ 1. 你目前的身份 (用 whoami )
- #!/bin/bash
-
echo
-e "Yourname is ==> $(whoami)" -
echo
-e "Thecurrent directory is ==> `pwd`"
2请自行建立一支程式,该程式可以用来计算『您还有几天可以过生日』
- #!/bin/bash
-
read
-p "Pleasinput your birthday (MMDD, ex> 0709): " bir - now=`date
+%m%d` - if
[ "$bir"== "$now"]; then - echo
"Happy Birthday to you!!!" -
elif
[ "$bir"-gt "$now"]; then - year=`date
+%Y` -
total_d=$(($((`date
--date= "$year$bir"+%s`-`date +%s`))/60/60/24)) - echo
"Your birthday will be $total_d later" - else
- year=$((`date
+%Y`+1)) -
total_d=$(($((`date
--date= "$year$bir"+%s`-`date +%s`))/60/60/24)) - echo
"Your birthday will be $total_d later" - fi
3让使用者输入一个数字,程式可以由 1+2+3... 一直累加到使用者输入的数字为止。
- #!/bin/bash
- read
-p "Pleaseinput an integer number: " number - i=0
- s=0
- while
[ "$i"!= "$number"] - do
- i=$(($i+1))
- s=$(($s+$i))
- done
- echo
"the result of '1+2+3+...$number' is ==> $s"
4先查看一下 /root/test/logical 这个名称是否存在; 2.) 若不存在,则建立一个档案,使用 touch 来建立,建立完成后离开; 3.) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为 logical ,之后离开; 4.) 如果存在的话,而且该名称为目录,则移除此目录!
- #!/bin/bash
- if
[ ! -e logical ]; then - touch
logical - echo
"Just make a file logical" - exit
1 -
elif
[ -e logical ] && [ -f logical ]; then - rm
logical - mkdir
logical - echo
"remove file ==> logical" - echo
"and make directory logical" - exit
1 -
elif
[ -e logical ] && [ -d logical ]; then - rm
-rf logical - echo
"remove directory ==> logical" - exit
1 - else
- echo
"Does here have anything?" - fi
5我们知道 /etc/passwd 里面以 :
来分隔,第一栏为帐号名称。请写一苹程式,可以将 /etc/passwd 的第一栏取出,而且每一栏都以一行字串『The 1
account is "root" 』来显示,那个 1 表示行数。
- #!/bin/bash
-
accounts=`cat
/etc/passwd ':'| cut -d -f1` - for
account in$accounts - do
- declare
-i i=$i+1 - echo
"The $i account is \"$account\" " - done
6利用循环计算10的阶乘
- #!/bin/sh
-
- factorial=1
-
- for
a in`seq 1 10` //1到10之间 - do
-
factorial=`expr $factorial \* $a` - done
-
- echo
"10! = $factorial"
7个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然
后打印出该数值,
然后再次要求用户输入数值。直到用户输入
"end"停止
- #!/bin/sh
-
- unset
var -
- while
[ "$var"!= "end"] - do
-
echo -n input a number: " -
read var -
[ "$var"= "end"] -
then -
-
fi -
echo is $var" -
done
8 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和
- #!/bin/sh
- sum=0
- for
a in`seq 1 100` - do
-
[ `expr $a % 3` -ne 0 ] -
then -
-
fi -
echo $a -
sum=`expr $sum + $a` - done
- echo
"sum = $sum"
9一个函数,利用shift计算所有参数乘积,假设参数均为整数(
特殊变量$# 表示包含参数的个数)
- #!
/bin/sh -
- result=1
- while
[ $# -gt 0 ] - do
-
result=`expr $result \* $1` -
shift - done
-
echo
$resul
10一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。
- #!/bin/sh
-
- case
${1##*.tar.} in -
bz2) -
tar jxvf $1 -
;; -
gz) -
tar zxvf $1 -
;; -
*) -
echo file type" -
esac
文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,
包的信息等。然后询问是否继续查询,是则循环刚才的过
程,否则退出。
#!/bin/sh
- RPM=/bin/rpm
- option="-q"
-
- while
true - do
-
echo to query?" -
select var "file" "package name" -
-
$var in -
All) -
option=$option -
-
;; -
file) -
echo -n input file name: " -
option=$option -
read argument -
-
;; -
package\ name) -
echo -n input package name: " -
read argument -
-
;; -
*) -
echo choose between 1-3" -
;; -
esac -
done -
-
echo do you want to know?" -
select var "location" "info" "package name" -
-
$var in -
location) -
option=$option -
-
;; -
info) -
option=$option -
-
;; -
package\ name) -
-
;; -
*) -
echo choose between 1-3" -
;; -
esac -
done -
-
${RPM} $option $argument -
-
echo [yes/no]" -
read answer -
-
[ "no"answer = ] -
then -
-
fi - done