您的位置:首页 > 运维架构 > Shell

shell脚本实例

2015-06-18 01:25 507 查看
脚本实例
脚本实例
---
学习的捷径就是练习

1.在linux里面是不在乎后缀名的,但是建议写上后缀名,如test.sh,这样一眼便看出这
是shell程序。
2.如果不能运行,一般要执行chmod +x filename 使文件可执行
3.执行格式一般为./test.sh,为了安全起见。
4.写shell脚本时最好要建立良好的习惯。 在每个 script 的档头处记录好∶(练习的时
候免了吧) ?

注:鸟哥的shell用的是bash,不过建议写成 #!/bin/sh这样就可以使用系统默认版本的
shell,而不一定就是用bash。
在获取命令的运行结果中,鸟哥用的是`(不是单引号'),建议用$(),更好一些。
# 请建立一支 script ,当你执行该 script 的时候,该 script 可以显示∶ 1. 你目前的身
份 (用 whoami ) 2. 你目前所在的目录 (用 pwd)
view plaincopy to clipboardprint?
1. #!/bin/bash
2. echo -e "Your name is ==> $(whoami)"
3. echo -e "The current directory is ==> `pwd`" #!/bin/bash
echo -e "Your name is ==> $(whoami)"
echo -e "The current directory is ==> `pwd`"

# 请自行建立一支程式,该程式可以用来计算『您还有几天可以过生日』啊??
view plaincopy to clipboardprint?
1. #!/bin/bash
2. read -p "Pleas input your birthday (MMDD, ex> 0709): " bir
3. now=`date +%m%d`
4. if [ "$bir" == "$now" ]; then
5. echo "Happy Birthday to you!!!"
6. elif [ "$bir" -gt "$now" ]; then
7. year=`date +%Y`
8. total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
9. echo "Your birthday will be $total_d later"
10. else
11. year=$((`date +%Y`+1))
12. total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
13. echo "Your birthday will be $total_d later"
14. fi #!/bin/bash
read -p "Pleas input your birthday (MMDD, ex> 0709)
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 +
echo "Your birthday will be $total_d later"
else
year=$((`date +%Y`+1))
total_d=$(($((`date --date="$year$bir" +%s`-`date +
echo "Your birthday will be $total_d later"
fi
# 让使用者输入一个数字,程式可以由 1+2+3... 一直累加到使用者输入的数字为止。
view plaincopy to clipboardprint?
1. #!/bin/bash
2. read -p "Please input an integer number: " number
3. i=0
4. s=0
5. while [ "$i" != "$number" ]
6. do
7. i=$(($i+1))
8. s=$(($s+$i))
9. done
10. echo "the result of '1+2+3+...$number' is ==> $s" #!/bin/bash
read -p "Please input 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"
# 撰写一支程式,他的作用是: 1.) 先查看一下 /root/test/logical 这个名称是否存在; 2.) 若
不存在,则建立一个档案,使用 touch 来建立,建立完成后离开; 3.) 如果存在的话,判
断该名称是否为档案,若为档案则将之删除后建立一个档案,档名为 logical ,之后离开;
4.) 如果存在的话,而且该名称为目录,则移除此目录! view plaincopy to clipboardprint?
1. #!/bin/bash
2. if [ ! -e logical ]; then
3. touch logical
4. echo "Just make a file logical"
5. exit 1
6. elif [ -e logical ] && [ -f logical ]; then
7. rm logical
8. mkdir logical
9. echo "remove file ==> logical"
10. echo "and make directory logical"
11. exit 1
12. elif [ -e logical ] && [ -d logical ]; then
13. rm -rf logical
14. echo "remove directory ==> logical"
15. exit 1
16. else
17. echo "Does here have anything?"
18. fi #!/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
# 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为帐号名称。请写一苹程式,可以将
/etc/passwd 的第一栏取出,而且每一栏都以一行字串『The 1 account is "root" 』来显示,
那个 1 表示行数。
view plaincopy to clipboardprint?
1. #!/bin/bash 2. accounts=`cat /etc/passwd | cut -d':' -f1`
3. for account in $accounts
4. do
5. declare -i i=$i+1
6. echo "The $i account is /"$account/" "
7. done #!/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

来自
来自来自
来自:
::
http://sucre.javaeye.com/blog/625918
1. 写一个脚本,利用循环计算10的阶乘 view plaincopy to clipboardprint?
1. #!/bin/sh
2.
3. factorial=1
4.
5. for a in `seq 1 10`
6. do
7. factorial=`expr $factorial /* $a`
8. done
9.
10. echo "10! = $factorial" #!/bin/sh

factorial=1

for a in `seq 1 10`
do
factorial=`expr $factorial /* $a`
done

echo "10! = $factorial"
注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现1到10之
间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然 后打印出
该数值,
然后再次要求用户输入数值。直到用户输入 "end"停止。 view plaincopy to clipboardprint?
1. #!/bin/sh
2.
3. unset var
4.
5. while [ "$var" != "end" ]
6. do
7. echo -n "please input a number: "
8. read var
9. if [ "$var" = "end" ]
10. then
11. break
12. fi
13. echo "var is $var"
14. done #!/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
3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之


view plaincopy to clipboardprint?
1. #!/bin/sh
2. sum=0
3. for a in `seq 1 100`
4. do
5. if [ `expr $a % 3` -ne 0 ]
6. then
7. continue
8. fi
9. echo $a
10. sum=`expr $sum + $a`
11. done
12. echo "sum = $sum" #!/bin/sh
sum=0
for a in `seq 1 100`
do
if [ `expr $a % 3` -ne 0 ]
then
continue
fi
echo $a
sum=`expr $sum + $a`
done
echo "sum = $sum"

4.一个函数,利用shift计算所有参数乘积,假设参数均为整数( 特殊变量$# 表
示包含参数的个数) view plaincopy to clipboardprint?
1. #! /bin/sh
2.
3. result=1
4. while [ $# -gt 0 ]
5. do
6. result=`expr $result /* $1`
7. shift
8. done
9. echo $resul #! /bin/sh

result=1
while [ $# -gt 0 ]
do
result=`expr $result /* $1`
shift
done
echo $resul 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。 view plaincopy to clipboardprint?
1. #!/bin/sh 2.
3. case ${1##*.tar.} in
4. bz2)
5. tar jxvf $1
6. ;;
7. gz)
8. tar zxvf $1
9. ;;
10. *)
11. echo "wrong file type"
12. esac #!/bin/sh

case ${1##*.tar.} in
bz2)
tar jxvf $1
;;
gz)
tar zxvf $1
;;
*)
echo "wrong file type"
esac 6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如
文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,
包的信息等。然后询问是否继续查询,是则循环刚才的过 程,否则退出。 view plaincopy to clipboardprint?
1. #!/bin/sh
2. RPM=/bin/rpm
3. option="-q"
4.
5. while true
6. do
7. echo "what to query?"
8. select var in "All" "file" "package name"
9. do 10. case $var in
11. All)
12. option=$option"a"
13. break
14. ;;
15. file)
16. echo -n "please input file name: "
17. option=$option"f"
18. read argument
19. break
20. ;;
21. package/ name)
22. echo -n "please input package name: "
23. read argument
24. break
25. ;;
26. *)
27. echo "please choose between 1-3"
28. ;;
29. esac
30. done
31.
32. echo "what do you want to know?"
33. select var in "location" "info" "package name"
34. do
35. case $var in
36. location)
37. option=$option"l"
38. break
39. ;;
40. info)
41. option=$option"i"
42. break
43. ;;
44. package/ name) 45. break
46. ;;
47. *)
48. echo "please choose between 1-3"
49. ;;
50. esac
51. done
52.
53. ${RPM} $option $argument
54.
55. echo "continue? [yes/no]"
56. read answer
57.
58. if [ answer = "no" ]
59. then
60. break
61. fi
62. done

本文出自 “江湖笑笑生” 博客,请务必保留此出处http://hashlinux.blog.51cto.com/9647696/1662963
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: