Linux学习—脚本练习题

Posted jimdo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习—脚本练习题相关的知识,希望对你有一定的参考价值。

shell脚本练习

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

1
2
3
4
5
6
7
#!/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文件验证)

1
2
3
4
5
6
7
#!/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验证)

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/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,实现禁止和充许普通用户登录系统

 

1
2
3
4
5
6
7
#!/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 ‘该用户已禁止登陆‘
1
2
3
4
5
#!/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

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

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

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

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

   设置提示符为绿色

   设置vim自动显示行号

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/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步骤全部通过后,为用户设置密码后,并提示密码已成功设置。最后正确退出。

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/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

以上是关于Linux学习—脚本练习题的主要内容,如果未能解决你的问题,请参考以下文章

linux 学习基础7之脚本的练习

linux 学习基础7之脚本的练习

linux shell脚本学习

学习Linux精神绝招

shell实例练习+详解

Linux常用Shell脚本,值得学习及收藏