Linux实验 (6) Shell编程
1.分析下列脚本的功能。cat example1 (注意:假如脚本文件名为example1)count=$#cmd=echowhile [ $count -gt 0]docmd=”$cmd \$$count”count=`expr $count -1`doneeval $cmd作用:把传给脚本的参数逆序显示出来2.编写shell脚本,将第2个位置参数及其后的各个参数所指...
·
1.分析下列脚本的功能。
cat example1 (注意:假如脚本文件名为example1)
count=$#
cmd=echo
while [ $count -gt 0]
do
cmd=”$cmd \$$count”
count=`expr $count -1`
done
eval $cmd
把传给脚本的参数逆序显示出来
2.编写shell脚本,将第2个位置参数及其后的各个参数所指定的文件复制到第1个位置参数指定的目录中。
#!/bin/bash
dir=$1 # 保存文件复制后的路径,即第一个参数
# 参数前移,运行shift命令之后,$1的值就变成$2的值了,原来的$1就不存在了。
# 同理$2的值变成$3的值,如果原来有9个参数,通过shift之后就剩下8个
shift
# 当没有把全部参数前移完时
while [ $1 ]
do
file = $1
cp $2 $1
shift # 再次前移参数
done
3.利用for循环将当前目录下.c文件移到指定目录下,之后显示该指定目录下的内容。
#!/bin/bash
for file in `ls -l / | grep ".*.c"`
{
mv /a/$file /tmp/mydir/b
}
ls /tmp/mydir
4.根据用户输入的用户名,查看系统中该用户是否登录。
#!/bin/bash
#输入值为空
if [ -z $1 ]
then
echo "Usage:`basename $0` + username"
exit
fi
for user in $*
do
count=`who|awk '{print $1}'|grep "\<$user\>"|wc -l`
if [ $count -ge 1 ]
then
echo "$user has looged on."
else
echo "$user has not looged on."
fi
done
5.用户输入一个1-10之间的数字,若不在该范围则输出信息“error”,否则输出信息“accept”。
#!/bin/bash
while [ -gt 0 ]
do
#判断是否为数字
echo -e "please input the digital:"
read num
#判断变量num是否为整数
expr $num + 0 1>/dev/null 2>&1 #会将标准输出,错误输出都重定向至/dev/null,也就是全部丢弃
#$? 表示上一条命令返回值,如果上一条命令成功执行,返回0,否则返回1
if [ $? -ne 0 ]
then
echo "${num} is not a number!"
exit 0
fi
#大于10时
if [ $num -gt 10 ]
then
echo "error"
#小于0时
elif [ $num -lt 0 ]
then
echo "error"
else
echo "accept"
fi
done
6.使用for循环在系统中成批添加10个用户,用户名分别是stu1~stu10。
#!/bin/bash
# 输入用户名,输入信息存入name变量中,限制30s的输入时间
read -p "Please input user name:" -t 30 name
# 输入需要创建的用户数量,存入num中,限制30s输入时间
read -p "Please input the number of users:" -t 30 num
# 输入需要创建的默认密码,存入pass中,限制30s输入时间
read -p "Please input the password of users:" -t 30 pass
# 用户名、用户数量、默认密码都输入成功之后
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]
then
# 输入的num变量为数值类型
y=$(echo $num | sed 's/[0-9]//g')
if [ -z "$y"]
then
# 创建用户
for (( i=1;i<=$num;i=i+1))
do
# 用户名以输入用户名+序号组成
/usr/sbin/useradd $name$i &> /dev/null
# 创建默认密码
echo $pass | /usr/bin/passwd --stdin $name$i &> /dev/null
done
fi
fi
cat /etc/passwd # 查看当前用户
7.任意设计一个shell程序,要求用到函数定义和调用。
输入一个数字n,然后从0开始每隔1秒输入一个数字,直到输出n-1为止。
#! /bin/bash
# Filename:LoopPrint.sh
function LoopPrint()
{
count=0;
while [ $count -lt $1 ];
do
echo $count;
let ++count;
sleep 1;
done
return 0;
}
read -p "Please input the times of print you want: " n;
LoopPrint $n;
8.分析杭电的上网认证系统(http://2.2.2.2/ac_portal/20170407143720/pc.html),通过wget发送post请求包完成网络的认证和注销。根据并分别完成两个shell脚本:
1)登录脚本,运行脚本后提示输入用户名和密码(密码不要显示出来),然后完成登录,并返回登录的结果。
login.sh
#! /bin/bash
echo "-----------Begin to connect the hdu.com----------"
echo "Username:"
read username
echo "Password:"
read -s passwd
echo " "
echo "------------Result-----------"
echo " "
wget -S --post-data="opr=pwdLogin&userName=$username&pwd=$passwd&rememberPwd=0" http://2.2.2.2/ac_portal/login.php
2)注销脚本,运行脚本后注销当前用户。
logout.sh
#! /bin/bash
echo "`wget -S --post-data="opr=logout" http://2.2.2.2/ac_portal/login.php`"
9.设定定时执行任务,每天上午9:30至下午15:00,每隔5分钟在/root/toplog/目录下以当前日期和时间组合为文件名(ex:20171122_1012.log),记录当前的系统性能日志(top命令的输出即可)。
touch mklog.sh
#!/bin/bash
time=$(date '+%Y%m%d%H%M')
touch /tmp/temp/$time.log
top -b -n 1 > /tmp/temp/$time.log
touch time.cron
*/5 9-15 * * * /tmp/temp/mklog.sh
Crontab /tmp/temp/time.cron
更多推荐
已为社区贡献1条内容
所有评论(0)