shell脚本案例

shell 脚本案例

root@liujie-desktop:/software/shell# sh stu2.sh 
$[1+2]
root@liujie-desktop:/software/shell# sh -x stu2.sh 
+ a=1
+ b=2
+ sum=$[1+2]
+ echo $[1+2]
$[1+2]
root@liujie-desktop:/software/shell# ./stu2.sh 
3
root@liujie-desktop:/software/shell# sh stu3.sh 
Please inut a number:1
Please input another number:2
the sum of two number is : $[1+2]
root@liujie-desktop:/software/shell# chmod u+x stu3.sh 
root@liujie-desktop:/software/shell# ./stu3.sh 
Please inut a number:1
Please input another number:2
the sum of two number is : 3
root@liujie-desktop:/software/shell# 

$1和$2,是shell脚本的预设变量,其中$1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2,当然一个shell脚本的预设变量是没有限制的,这回你明白了吧。另外还有一个$0,不过它代表的是脚本本身的名字;

root@liujie-desktop:/software/shell# cat stu4.sh
#! /bin/bash
sum=$[$1+$2]
echo $sum
root@liujie-desktop:/software/shell# ./stu4.sh 1 3
4
  ((a<60))这样的形式,这是shell脚本中特有的格式,用一个小括号或者不用都会报错,请记住这个格式
root@liujie-desktop:/software/shell# cat stu5.sh 
#! /bin/bash
read -p "Please input your score:" a
if((a<60)) ; then
	echo "you didn't pass the exam."
fi
root@liujie-desktop:/software/shell# ./stu5.sh 
Please input your score:45
you didn't pass the exam.
if elif  else
root@liujie-desktop:/software/shell# cat stu5.sh 
#! /bin/bash
read -p "Please input your score:" a    #a前面的空格必须得有
if((a<60)) ; then
	echo "you didn't pass the exam."

elif ((a>=60)) && ((a<85)) ; then #分号前后的空格可有可无,if后面的空格可有可无
	echo "you passed the exam."  # line 7: echoyou passed the exam.:找不到命令 。echo后面的空格必须有
else 
	echo "very good."
fi
root@liujie-desktop:/software/shell# ./stu5.sh 
Please input your score:60
you passed the exam.

在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)

root@liujie-desktop:/software/shell# cat stu5.sh 
#! /bin/bash
read -p "please input a number :" b  
if [ $b -gt 10 ]; then  # $b 和 10 前后必须要有空格
	echo "$b >10"
else
	echo "$b <=10"
fi

shell 脚本中if还经常判断关于档案属性,比如判断是普通文件还是目录,判断文件是否有读写执行权限等。常用
的也就几个选项:
-e :判断文件或目录是否存在
-d :判断是不是目录,并是否存在
-f :判断是否是普通文件,并存在
-r :判断文档是否有读权限
-w :判断是否有写权限
-x :判断是否可执行
使用if判断时,具体格式为: if [ -e filename ] ; then


利用case进行逻辑判断

root@liujie-desktop:/software/shell# cat stu6.sh 
#! /bin/bash
read -p "please input a number :" n
a=$[ $n % 2]
case $a in
1)
	echo "the number is odd"
	;;
0)
	echo "the number is even"
	;;
esac

root@liujie-desktop:/software/shell# ./stu6.sh 
please input a number :12
the number is even

    ☆case脚本常用于编写系统服务的启动脚本,在编写tftpd服务 /etc/init.d/tftpd 中就用到了。

循环

root@liujie-desktop:/software/shell# cat stu7.sh 
#! /bin/bash
for i in `seq 1 5` ; do
	echo $i
done
root@liujie-desktop:/software/shell# ./stu7.sh 
1
2
3
4
5

root@liujie-desktop:/software/shell# cat  stu8.sh 
#! /bin/bash
a=10
while [ $a -ge 4 ]; do
	echo "$a"
	a=$[$a-1]
done
root@liujie-desktop:/software/shell# ./stu8.sh 
10
9
8
7
6
5
4

另外你可以把循环条件忽略掉,可以这样写监控脚本。
while :; do
command
done

函数

root@liujie-desktop:/software/shell# cat stu9.sh 
#! /bin/bash
function sum(){
	sum=$[$1+$2]
	echo $sum
}
sum $1 $2
root@liujie-desktop:/software/shell# ./stu9.sh 10 20
30
在shell脚本中,函数一定要写在最前面,不能出现在中间或者最后,因为函数是要被调用的,如果还没有出现就被调用,肯定是会出错的

例子:

1.  计算1-100和

root@liujie-desktop:/software/shell# cat stu10.sh 
#! /bin/bash
sum=0
a=100
while [ $a -ge 1   ];do
	sum=$[$sum+$a]
	a=$[$a-1]
done
echo "sum = $sum"
root@liujie-desktop:/software/shell# cat stu11.sh 
#! /bin/bash
sum=0
for i in `seq 1 100` ; do
	sum=$[$i+$sum]
done
echo "sum= $sum"
2. 将把/root/目录下的所有目录拷贝到/tmp/目录下
root@liujie-desktop:/software/shell# cat stu13.sh 
#! /bin/bash
cd /root
for f in `ls` ; do     #不适用 cd /root ,而直接ls /root不行
	if [ -d $f ] ; then
		cp -r $f /tmp/
	fi
done
root@liujie-desktop:/software/shell# vim stu13.sh 
root@liujie-desktop:/software/shell# ./stu13.sh 
confall
公共的
模板
视频
图片
文档
下载
音乐
桌面
3. 批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组
root@liujie-desktop:/software/shell# cat stu14.sh 
#! /bin/bash
groupadd users
for i in `seq 0 9` ; do
	useradd -g users user_0$i
done
for i in `seq 10 100` ; do
	useradd -g users user_$i
done

4.截取文件test.log中包含关键词’abc’的行中的第一列(假设分隔符为”:”),然后把截取的数字排序(假设第一列为数字),然后打印出重复次数超过10次的列;

awk -F':' '$0~/abc/ ' test.log >/tmp/n.txt
sort -n n.txt |uniq -c |sort -n >/tmp/n2.txt
awk '$1>10 ' /tmp/n2.txt
5.  判断输入的IP是否正确(IP的规则是,n1.n2.n3.n4,其中1<n1<255, 0<n2<255, 0<n3<255, 0<n4<255)

checkip() {
if echo $1 |egrep -q '^[0-9].[0-9].[0-9].[0-9]/span> ; then
a= echo $1 | awk -F. ''
b= echo $1 | awk -F. ''
c= echo $1 | awk -F. ''
d= echo $1 | awk -F. ''
for n in $a $b $c $d; do
if [ $n -ge 255 ] || [ $n -le 0 ]; then
第 14 章 shell 脚本 | 191
echo "the number of the IP should less than 255 and greate than 0"
return 2
fi
done
else
echo "The IP you input is something wrong, the format is like 192.168.100.1"
return 1
fi
}
rs=1
while [ $rs -gt 0 ]; do
read -p "Please input the ip:" ip
checkip $ip
rs= echo $?
done
echo "The IP is right!"








  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值