您的位置:首页 > 其它

day04脚本练习题

2016-06-17 18:08 302 查看
1、在fun.sh脚本里定义函数sum_two(功能是能够计算任意两个数相加的和)
#!/bin/bash
#yi=$1
#er=$2
if [ -z $yi ] || [ -z $er ];then
echo数字不能为空
if
sum_two() {
#sum=`expr $yi + $er`
sum=`expr $1 + $2`
#echo "$yi + $er = $sum"
echo "$1 + $2 = $sum"
}
#sum_two $1 $2
sum_two $*



#!/bin/bash
read -p "请输入你要计算的第一个数:" yi
read -p "请输入你要计算的第二个数:" er
if [ -z $yi ] || [ -z $er ];then
echo "数字不能为空"
exit
fi
sum_two(){
sum=`expr $yi + $er`
echo "他们的和是 $sum"
}
sum_two

2、js_four.sh(对任意一个数做四则运算,并把运算结果输出,并能够根据
用户选择运算的类型做运算)

#!/bin/bash

#!/bin/bash
jia(){
i=0
while [ $# -gt 1 ]
do
i=`expr $i + $2`
shift
done
echo $i
}

jian(){
i=`expr 2 \* $2`
while [ $# -gt 1 ]
do
i=`expr $i - $2`
shift
done
echo $i
}

cheng(){
i=1
while [ $# -gt 1 ]
do
i=`expr $i \* $2`
shift
done
echo $i
}

chu(){
i=`expr $2 \* $2`
while [ $# -gt 1 ]
do
i=`expr $i / $2`
shift
done
echo $i
}
case $1 in
+)
jia $*;;
-)
jian $*;;
x)
cheng $*;;
/)
chu $*;;
*)
echo "只能选择 | + | - | x | \ |"
esac

测试 sh js_four.sh + 12 13



#!/bin/bash
read -p "请输入你要选择运算的符号| + | - | x | / | " num
jia(){
i=0
while [ $# -gt 0 ]
do
i=`expr $i + $1`
shift
done
echo $i
}

jian(){
i=`expr 2 \* $1`
while [ $# -gt 0 ]
do
i=`expr $i - $1`
shift
done
echo $i
}

cheng(){
i=1
while [ $# -gt 0 ]
do
i=`expr $i \* $1`
shift
done
echo $i
}

chu(){
i=`expr $1 \* $1`
while [ $# -gt 0 ]
do
i=`expr $i / $1`
shift
done
echo $i
}
case $num in
+)
jia $*;;
-)
jian $*;;
x)
cheng $*;;
/)
chu $*;;
*)
echo "只能选择 | + | - | x | \ |"
esac

测试 sh js_four.sh 12 13
请输入你要选择运算的符号| + | - | x | / | +

3、求test.sh脚本中定义名为jc的函数,功能是计算用户任意数的阶乘
#!/bin/bash
shu(){
j=$1
i=1
if [ -z $j ] || [ $j -eq 0 ];then
echo "0"
exit
fi
while [ $j -gt 0 ]
do
i=`expr $i \* $j`
let j--
done
echo "$i"
}
shu $*



#!/bin/bash
jc(){
read -p "请输入你想要算的阶乘数" n
if [ -z $n ] || [ $n -eq 0 ] ;then
echo 0;exit
fi
j=1
for ((i=1;i<=$n;i++))
do
j=`expr $j \* $i`
done
echo $j
}
jc

4、安装源码包的网站服务-rhel5.
能使用service apached start | stop | status 对源码网站服务器停止启动和查看状态

锁文件方法
#vi /etc/init.d./httpd

#!/bin/bash
# chkconfig:35 55 25
# description: secure apache server
# processname: httpd
start(){
/usr/local/httpd/bin/apachectl start
echo "启动 httpd: [确定]"
touch /usr/local/httpd/httpd.lock启动
}

stop(){
/usr/local/httpd/bin/apachectl stop
echo "停止httpd: [确定]"
rm -rf /usr/local/httpd/httpd.lock
}

status(){
if [ -e /usr/local/httpd/httpd.lock ];then
echo "httpd already 启动"
else
echo "httpd 已停"
fi
}

case $1 in
start)
start;;
stop)
stop;;
status)
status;;
*)
echo "用法: /etc/init.d/httpd {start|stop|status}"
esac

#chmod +x /etc/init.d/httpd
#service httpd start
#chkconfig --add httpd;chkconfig --list httpd



#vi /etc/init.d./httpd

#!/bin/bash
# chkconfig: 2345 55 25
# description: source apache server
# processname: httpd
start(){
/usr/local/httpd/bin/apachectl start
echo "启动 httpd: [确定]"

stop(){
/usr/local/httpd/bin/apachectl stop
echo "停止httpd: [确定]"

}status(){
netstat -tulnp grep :httpd %> /dev/null
if [ $? -eq 0 ];then
echo "service in on"
else
echo "service is no on"
}

case $1 in
start)
start;;
stop)
stop;;
status)
status;;
*)
echo "用法: /etc/init.d/httpd {start|stopstatus}"
esac
#chmod +x /etc/init.d/httpd
#service httpd start
#chkconfig --add httpd;chkconfig --list httpd

5、arr.sh
把用户从健盘的输入的名字保存到数组stugrp里

并输出stugrp数组的元素的第2个元素的元素值

输出stugrp数组的所有元素

用户循环结构的方式输出stugrp数组的所有元素

方法1:
#!/bin/bash
stugrp=($*)
for ((i=0;i<`echo ${#stugrp[@]}`;i++))
do
echo ${stugrp[$i]}
done

方法2
#!/bin/bash
read -p "input name1" stugrp[0]
read -p "input name1" stugrp[1]
read -p "input name1" stugrp[2]
echo ${stugrp[1]}
i=0
while [ $i -le 2 ]
do

echo ${stugrp[$i]}
let i++
done

方法3
#!/bin/bash
read -p "请输入你的用户名:" name
read -p "请输入你的用户名:" name1
read -p "请输入你的用户名:" name2
stugrp=($name $name1 $name2)
echo ${stugrp[1]}
echo
i=0
while [ $i -le 2 ]
do

echo ${stugrp[$i]}
let i++
done

方法4
for i in `echo ${stugrp[@]}`
do
echo $i
done

6、用循环结构给stugrp数组赋值,(根据保存名字的个数给数组赋值)

#!/bin/bash
read -p "请输入你要输入的个数:" sum
read -p "请输入你要输入的名字:" name
while [ -z $sum ]
do
echo "信息不能为空";exit
done
szgrp=($name)
i=0
if [ $sum -eq ${#szgrp[*]} ];then
while [ $i -lt $sum ]
do
echo ${szgrp[$i]}
let i++
done
else
echo "你输入的名字数目需要符合你输入的个数"
fi



#!/bin/bash
declare -i NUM
read -p "你要输入多少个名字?:"NUM
declare -a STUGRP
declare -i i=0
while [ $i -lt $NUM ]
do
declare -i ii=i+1
read -p "输入第$ii个名字:" STUGRP[$i]
let ++i
done

echo ---------------------------------------------

NUM=${STUGRP[*]}
for ((i=0;i<NUM;++i))
do
echo ${STUGRP[$i]}
done

7、mysql+cluster.sh (检查mysql集群中各服务器的物理联通性)

执行脚本的执行方式:
./mysql_cluster.sh 检查服务器的台数 服务器IP地址列表

例如:
./mysql_cluster.sh 3 1.1.1.1 1.1.1.2 1.1.1.3

能够更改用户输入检查服务器的台数和IP地址对应的检查
输入的IP地址个数要与检查服务器台数匹配
如果用户在执行脚本时,执行方式错误,提示用户脚本的正确执行方式.
把不在线的服务器IP地址和不在线时间保存到/clusterdir/notline.txt文件里
输入在线主机的ip地址和不在线主机的台数

8、slave_status.sh(检查mysql主从从结构中从数据库服务器的状态)
1、本机的数据库服务是否正在运行
2、能否与主数据库服务器正常通信
3、能否使用授权用户连接数据库服务器
4、本机的slave_IO进程是否处于YES状态
本机的slave_SQL进程是否处于YES状态

#!/bin/bash
netstat -tulnp | grep :3306 > /dev/null
if [ $? -eq 0 ];then
echo "服务正在运行"
else
service mysqld start
fi
ping -c 3 192.168.1.100 &> /dev/null
if [ $? -eq 0 ];then
echo "网络连接正常"
else
echo "网络连接失败"
fi
mysql -h192.168.1.100 -uroot -p123456 &> /dev/null
if [ $? -eq 0 ];then
echo "数据库连接成功"
else
echo "数据库连接失败"
fi
IO= mysql -uroot -p123 -e "show slave status\G" | grep Slave_IO_Running | awk '{print $2}' > /dev/null
SQL= mysql -uroot -p123 -e "show slave status\G" | grep Slave_SQL_Running | awk '{print $2}' /dev/null
if [ IO==Yes ] && [ SQL==Yes ];then
echo “IO and SQL 连接成功”
else
echo "IO线程和SQL线程连接失败"
fi

9、rename_file.sh(批量修改当前目录下的文件)
把.txt结尾的文件都修改为以.doc结尾
mv image.txt image-1.doc
web.txt web-2.doc
test.txt test-3.doc

#!/bin/bash
for i in `ls ??.sh`
do
file=${i%.*}
mv $file.sh $file.doc
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  脚本 day 练习题