首页 > 代码库 > linux学习笔记四(shell编程二)
linux学习笔记四(shell编程二)
写一个脚本:
计算100以内所有能被3整除的正整数的和;
取模,取余:%
3%2=1
100%55=45
#!/bin/bash
let SUM=0
for I in {1..100};do
TMP=$[$I%3]
if [ $TMP -eq 0 ];then
SUM=$[$SUM+$I]
fi
done
echo "SUM is $SUM"
写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
写一个脚本:
每5秒钟进行判断某用户是否登录。
#!/bin/bash
for I in `seq 100`;do
w|grep "wuxiangd" &>/dev/null && echo "wuxiangdong is loggin in" || echo "wuxiangdong is not loggin in"
sleep 5
done
写一个脚本:
启动服务的选项:只接受参数start,stop,restart,status其中之一
#!/bin/bash
if [ $# -lt 1 ];then
echo "Usage: `basename $0` {start|stop|restart|status}"
fi
case $1 in
-sta*)
echo "service start"
;;
-stop)
echo "service stop"
;;
-restart)
echo "service restart"
;;
-status)
echo "service running"
;;
*)
echo "Unknow"
exit 2
;;
esac
写一个脚本:
判断10个随机数中,最大和最小的随机数,并且输出
#!/bin/bash
declare -i MIN=0
declare -i MAX=0
for I in {1..10};do
MYRANDOM=$RANDOM
[ $I -eq 1 ] && MIN=$MYRANDOM
if [ $I -lt 10 ];then
echo -n "$MYRANDOM ,"
else
echo "$MYRANDOM"
fi
if [ $MYRANDOM -gt $MAX ];then
MAX=$MYRANDOM
fi
if [ $MYRANDOM -lt $MIN ] ;then
MIN=$MYRANDOM
fi
done
echo "The Max is $MAX"
echo "The Min is $MIN"
写一个脚本:
通过选项-del -add -v等参数进行删除和增加用户。
#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0
for I in `seq 0 $#`; do
if [ $# -gt 0 ]; then
case $1 in
-v|--verbose)
DEBUG=1
shift ;;
-h|--help)
echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 0
;;
--add)
ADD=1
ADDUSERS=$2
shift 2
;;
--del)
DEL=1
DELUSERS=$2
shift 2
;;
*)
echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 7
;;
esac
fi
done
if [ $ADD -eq 1 ]; then
for USER in `echo $ADDUSERS | sed ‘s@,@ @g‘`; do
if id $USER &> /dev/null; then
[ $DEBUG -eq 1 ] && echo "$USER exists."
else
useradd $USER
[ $DEBUG -eq 1 ] && echo "Add user $USER finished."
fi
done
fi
if [ $DEL -eq 1 ]; then
for USER in `echo $DELUSERS | sed ‘s@,@ @g‘`; do
if id $USER &> /dev/null; then
userdel -r $USER
[ $DEBUG -eq 1 ] && echo "Delete $USER finished."
else
[ $DEBUG -eq 1 ] && echo "$USER not exist."
fi
done
fi
练习:写一个脚本showlogged.sh,其用法格式为:
showlogged.sh -v -c -h|--help
其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户数;
如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息;如
Logged users: 4.
They are:
root tty2 Feb 18 02:41
root pts/1 Mar 8 08:36 (172.16.100.177)
root pts/5 Mar 8 07:56 (172.16.100.177)
hadoop pts/6 Mar 8 09:16 (172.16.100.177)
#!/bin/bash
#
declare -i SHOWNUM=0
declare -i SHOWUSERS=0
for I in `seq 1 $#`; do
if [ $# -gt 0 ]; then
case $1 in
-h|--help)
echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
exit 0 ;;
-v|--verbose)
let SHOWUSERS=1
shift ;;
-c|--count)
let SHOWNUM=1
shift ;;
*)
echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
exit 8 ;;
esac
fi
done
if [ $SHOWNUM -eq 1 ]; then
echo "Logged users: `who | wc -l`."
if [ $SHOWUSERS -eq 1 ]; then
echo "They are:"
who
fi
fi
写个脚本,按如下方式执行:
mkscript.sh -v|--version VERSION -a|--author AUTHOR -t|--time DATETIME -d|--description DESCRIPTION -f|--file /PATH/TO/FILE -h|--help
1、此脚本能创建或打开-f选项指向的文件/PATH/TO/FILE;
如果其为空文件,能自动为其生成第一行;
如果文件不空,且第一行不是#!/bin/bash,则中止此脚本,并报错“The file is not a bash script.";
否则,则直接使用vim 打开此文件;
提示:/PATH/TO/FILE,要判断其目录是否存在;如果不存在,则报错;
2、如果为空文件,自动生成的第一行内容为:
#!/bin/bash
3、如果为空文件,且使用了-a选项,则在文件中添加“# Author: -a选项的参数”,比如:
# Author: Jerry
4、如果为空文件,且使用了-t选项,则在文件中添加“# Date: 脚本执行-t选项后指定的时间”,比如:
# Date: 2013-03-08 18:05
5、如果为空文件,且使用了-d选项,则在文件中添加“# Description: -d选项的内容”,比如:
# Description: Create a bash script file head.
6、如果为空文件,且使用了-v选项,则在文件添加“# Version: -v后跟的参数”,比如:
# Version: 0.1
6、-h选项只能单独使用,用于显示使用帮助;
7、其它选项,显示帮助信息;
说明:
这是一个用于创建脚本的脚本,它可以自动帮助创建一个bash脚本的文件头,这样,以后使用此脚本来创建其它脚本将变得比较高效。比如:
#!/bin/bash
# Author: Jerry(jerry@magedu.com)
# Date: 2013-03-08 18:05
# Description: Create a bash script file head.
# Version: 0.1
#
实现:
#!/bin/bash
declare -i VERSION=0
declare -i AUTHOR=0
declare -i TIME=0
declare -i DESCRIPTION=0
declare -i FILE=0
for I in `seq $#`;do
-v|-version)
VERSION=1
MYVERSION=$2
-a|--author)
AUTHOR=1
MYAUTHOR=$2
shift 2
;;
-t|-time)
TIME=1
MYTIME=$2
shift 2
;;
-d|--description)
DESCRIPTION=1
MYDESCRIPTION=$2
shift 2
;;
-f|--file)
FILE=1
MYFILE=$2
shift 2
;;
-h|-help)
exit 0
;;
*)
esac
fi
done
#######################################################################################
if [ $FILE -eq 1 ];then
if [ -e $MYFILE ];then
MYHEAD=`head -1 $MYFILE`
if [ "$MYHEAD" == "#!/bin/bash" ];then
if [ $AUTHOR -eq 1 ];then
echo "#Author:$MYAUTHOR">>$MYFILE
fi
if [ $TIME -eq 1 ];then
echo "#Date:$MYTIME">>$MYFILE
fi
if [ $DESCRIPTION -eq 1 ];then
echo "#Description:$MYDESCRIPTION">>$MYFILE
fi
if [ $VERSION -eq 1 ];then
echo "#Version:$MYVERSION">>$MYFILE
fi
vim + $MYFILE
exit 0
else
echo "The file $MYFILE is not a bash Script!"
fi
else
touch $MYFILE
echo "#!/bin/bash">>$MYFILE
if [ $AUTHOR -eq 1 ];then
echo "#Author:$MYAUTHOR">>$MYFILE
fi
if [ $TIME -eq 1 ];then
echo "#Date:$MYTIME">>$MYFILE
fi
if [ $DESCRIPTION -eq 1 ];then
echo "#Description:$MYDESCRIPTION">>$MYFILE
fi
if [ $VERSION -eq 1 ];then
echo "#Version:$MYVERSION">>$MYFILE
fi
vim + $MYFILE
exit 0
fi
fi
本文出自 “技术至上” 博客,谢绝转载!
linux学习笔记四(shell编程二)