Linux学习—脚本练习题

shell脚本练习

1、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满

#!/bin/bash
#编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
#*************************************************************************************************
#!/bin/bash
disk_max=$(df |grep "sda" |grep -o "[[:digit:]]\{1,3\}%" |tr -d "%" |sort |tail -1)
inode_max=$(df -i|grep "sda" |grep -o "[[:digit:]]\{1,3\}%" |tr -d "%" |sort |tail -1)
[ $disk_max -gt 80 -o $inode_max -gt 80 ] && wall space will be full

2、编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写(可用shadow文件验证)

#!/bin/bash
#编写脚本/bin/per.sh,判断当前用户对指定的参数文件,是否不可读并且不可写
#***********************************************************************************
read -p "请输入文件: " file
if [ ! -r $file -a ! -w $file ] ; then    
        echo "不可读且不可写"
fi

3、编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执行权限,否则提示用户非脚本文件(创建一个文件test.sh验证)

#!/bin/bash
#编写脚本/root/bin/excute.sh ,判断参数文件是否为sh后缀的普通文件,如果是,添加所有人可执
#权限,否则提示用户非脚本文件
#**************************************************************************************
read -p "Please input a filename: " file
if [[ $file =~ .*sh$ ]] ; then
        if [ -f $file ] ; then
                chmod a+x $file
                echo "success"
        fi
else
        echo '非脚本文件' 
fi

4、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统

#!/bin/bash
#编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统
#***************************************************************************************
read -p "请输入禁止的用户:" user
uid=$( id $user |tr " " @ |cut [email protected] -f1 |grep -o "[0-9]\{3,\}" )
[ $uid -ge 500 ] && usermod -s /bin/nologin $user || echo '该用户为系统用户,无法禁止!'
echo '该用户已禁止登陆'
#!/bin/bash
read -p "请输入允许登录的用户:" user
uid=$( id $user |tr " " @ |cut [email protected] -f1 |grep -o "[0-9]\{3,\}" )
[ $uid -ge 500 ] && usermod -s /bin/bash $user || echo '该用户为系统用户'
echo '该用户已允许登陆'

5、让所有用户的PATH环境变量的值多出一个路径,例如:/usr/local/apache/bin

echo "PATH=$PATH:/usr/local/apache/bin">>/etc/profile.d/path.sh

6、编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等

一旦执行reset.sh,会设置以下内容

创建一个别名为ipconfig功能是显示第一个网卡的IP

设置提示符为绿色

设置vim自动显示行号

设置登录后的欢迎界面(内容自定义)

#!/bin/bash
#编写用户的环境初始化脚本reset.sh,包括别名,登录提示符,vim的设置,环境变量等一旦执行reset.sh,会设置以下内容
#   创建一个别名为ipconfig功能是显示第一个网卡的IP
#   设置提示符为绿色
#   设置vim自动显示行号
#   设置登录后的欢迎界面(内容自定义)
#****************************************************************************************************************
cat <<EOF >> ~/.bashrc
alias ipconfig='ifconfig etho'
PS1='\[\e[32;40m\][\[email protected]\h \W]\$ '
EOF
cat <<EOF >> ~/.vimrc
set nu
EOF
echo 'echo welcome' >> /etc/bashrc

7、编写一个创建用户的脚本,要求以下功能

a.提示用户输入希望创建的用户名(当用户超时8秒不输入,提示超时并退出)

b.检测用户名是否已存在,若存在则提示用户名已存在,并退出。

c.用户创建完成后提示用户是否要继续设置密码,若用户输入yes、YES、y、Y时则继续下一步,如输入其他,或超时8秒均退出。

d.接上一步,为用户设置密码,首先提示用户输入要设置的密码,密码的输入过程不可见。

e.对用户上一步所输入的密码进行长度检测,若少于5位(包含5位),则提示用户密码太短,并退出。

f.对用户在第d步所输入的密码进行复杂度检测,若所输入的内容与/usr/share/dict/words 字典中的某一行条目完全一致,则提示密码是一个常见单词,并退出。

g.再一次让用户输入密码,若第二次输入的密码与在第d步输入的不一致,则提示用户两次密码不一致并退出。

h.d至g步骤全部通过后,为用户设置密码后,并提示密码已成功设置。最后正确退出。

以上的所有退出情况应给出不同的返回值。

#!/bin/bash
#****************************************
#a.提示用户输入希望创建的用户名(当用户超时8秒不输入,提示超时并退出)
#b.检测用户名是否已存在,若存在则提示用户名已存在,并退出
#c.用户创建完成后提示用户是否要继续设置密码,若用户输入yes、YES、y、Y时则继续下一步,如输入其他,或超时8秒均退出。
#d.接上一步,为用户设置密码,首先提示用户输入要设置的密码,密码的输入过程不可见
#e.对用户上一步所输入的密码进行长度检测,若少于5位(包含5位),则提示用户密码太短,并退出
#f.对用户在第d步所输入的密码进行复杂度检测,若所输入的内容与/usr/share/dict/words 字典中的某一行条目完全一致,则提示密码是一个常见单词,并退出
#g.再一次让用户输入密码,若第二次输入的密码与在第d步输入的不一致,则提示用户两次密码不一致并退出
#h.d至g步骤全部通过后,为用户设置密码后,并提示密码已成功设置。最后正确退出。
#以上的所有退出情况应给出不同的返回值。
#*****************************************
read -t 8 -p "请输入创建的用户: " user
if [ "$(echo $?)" -ne "0" ] ; then
        echo '超时'
        exit 1
fi
A=$(cat /etc/passwd |cut -d: -f1 |grep "$user\>")
if [ -n "$A" ] ; then
        echo '用户已存在'
        exit 2
fi
useradd $user
read -t 8 -p "是否设置密码? " answer || exit 3
case $answer in
        yes | YES | y | Y )
                read -s -p "请输入至少五位密码: " password
                if [ "$(echo $password |grep -o "." |grep -c ".")" -le "5" ] ; then
                        echo '密码太短'
                        exit 4
                else
                        if [ "$password" == "$(cat /usr/share/dict/words |grep -o "\<$password\>")" ] ; then
                                echo '密码是一个常见单词'
                                exit 5
                        fi
                fi ;;
        * )
                exit 6 ;;
esac
read -p "请再次输入密码: " password_confirm
if [ "$password" == "$password_confirm" ] ; then
        echo '密码设置成功'
        exit
else
        echo '两次密码输入不一致'
        exit 7
fi

原文地址:http://blog.51cto.com/13570193/2066565

时间: 2024-10-09 09:01:38

Linux学习—脚本练习题的相关文章

Linux学习-脚本2

写一个脚本:使用函数完成 1.函数能够接受一个参数,参数为用户名: 判断一个用户是否存在 如果存在,就返回此用户的shell和UID:并返回正常状态值: 如果不存在,就说此用户不存在:并返回错误状态值: 2.在主程序中调用函数: 扩展1:在主程序中,让用户自己输入用户名后,传递给函数来进行判断: 扩展2:在主程序中,输入用户名判断后不退出脚本,而是提示用户继续输入下一个用户名:如果用户输入的用户不存在,请用户重新输入:但如果用户输入的是q或Q就退出: #!/bin/bash # user(){

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu

Linux链接脚本学习--lds(转)

Linux链接脚本学习--lds 一.概论 ld: GNU的链接器. 用来把一定量的目标文件跟档案文件链接在一起,并重新定位它们的数据,链接符号引用. 一般编译一个程序时,最后一步就是运行ld进行链接 每一个链接都被一个链接脚本所控制,这个脚本是用链接命令语言书写的. 二.链接脚本 链接脚本的一个主要目的是描述输入文件中的各个段(数据段,代码段,堆,栈,bss)如何被映射到输出文件中,并控制输出文件的内存排布. 链接器总是使用链接脚本的,如果你不提供,则链接器会使用一个缺省的脚本,这个脚本是被编

Linux Shell脚本编程学习笔记和实战

http://www.1987.name/141.html shell基础 终端打印.算术运算.常用变量 Linux下搜索指定目录下特定字符串并高亮显示匹配关键词 从键盘或文件中获取标准输入 [read命令] 文件的描述符和重定向 数组.关联数组和别名使用 函数的定义.执行.传参和递归函数 条件测试操作与流程控制语句 获取时间日期格式和延时 [date.sleep命令] 内部字段分隔符IFS和脚本的调试DEBUG 显示.读取或拼接文件内容 [cat命令] 文件查找与打印文件列表 [find命令]

linux学习之路之使用脚本来复制二进制程序和所需的库文件

首先介绍bash的特殊语法 ${parameter#*word} 其中parameter为变量,word为分隔符,表示从变量最边左字符开始到第一匹配到分隔符(word)之间的字符串都去掉 ${parameter##*word}:表示从变量最左边字符开始到最后一次匹配到该分隔符之间的字符串都去掉 注意:其中变量不要加$符号 当*在分隔符(word)前面时,表示从左开始匹配 当*在分隔符(word)后面时,表示从右开始匹配 ${parameter%word*}:表示从最右边字符开始到第一次匹配到的分

linux学习之路之脚本编程知识点

脚本编程知识点 1.获取变量中字符的长度 ${#VARNAME} 2.变量赋值 ${parameter:-word}:如果parameter为空或者未定义,则整个表达式为word:否则表达式值为parameter ${parameter:+word}:如果parameter为空或者未定义,则整个表达式为空:如果parameter有值,则整个表达式为word ${parameter:=word}:如果parameter为空或者未定义,则整个表达式值为parameter:否则整个表达式值为word

linux学习—shell脚本知识点总结

Shell脚本 --Shell脚本有点像早期的批处理文件,将一些命令汇总起来一次执行,但Shell有更强大的功能,可以类似于程序的编写,不需要编译就能执行,使用起来很方便,可以简化我们日常的管理工作. 目录 什么是Shell 脚本的运行方法 #!(读shabang)的作用详解 结合案例分析变量类型 特殊变量及其[email protected] $*的区别 退出状态 算数运算 test和[ expression ]判断 一.什么是Shell 我们知道管理整个计算机硬件的其实是核心(kernel)

Linux学习之源码包安装与脚本安装(十八)

Linux学习之源码包安装与脚本安装 目录 源码包与RPM包的区别 源码包安装 脚本安装 源码包与RPM包的区别 1.区别 安装之前的区别:概念上的区别 安装之后的区别:安装位置不同 源码包: 开源的 安装更慢,更容易报错 安装更自由 安装完后效率更高 RPM包: 经过编译,能看到源代码 安装更快,报错容易解决 2.RPM包安装位置与源码包安装位置 RPM包安装位置: 源码包安装位置: 安装在指定位置当中,一般是/usr/local/软件名/  3.安装位置不同带来的影响 RPM包安装的服务可以