shell脚本练习
1、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满
|
1
2
3
4
5
6
7
|
#!/bin/bash#编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满#*************************************************************************************************#!/bin/bashdisk_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 "请输入文件: " fileif [ ! -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: " fileif [[ $file =~ .*sh$ ]] ; then if [ -f $file ] ; then chmod a+x $file echo "success" fielse 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 "请输入禁止的用户:" useruid=$( id $user |tr " " @ |cut -d@ -f1 |grep -o "[0-9]\{3,\}" )[ $uid -ge 500 ] && usermod -s /bin/nologin $user || echo ‘该用户为系统用户,无法禁止!‘echo ‘该用户已禁止登陆‘ |
|
1
2
3
4
5
|
#!/bin/bashread -p "请输入允许登录的用户:" useruid=$( id $user |tr " " @ |cut -d@ -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 >> ~/.bashrcalias ipconfig=‘ifconfig etho‘PS1=‘\[\e[32;40m\][\u@\h \W]\$ ‘EOFcat <<EOF >> ~/.vimrcset nuEOFecho ‘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 "请输入创建的用户: " userif [ "$(echo $?)" -ne "0" ] ; then echo ‘超时‘ exit 1fiA=$(cat /etc/passwd |cut -d: -f1 |grep "$user\>")if [ -n "$A" ] ; then echo ‘用户已存在‘ exit 2fiuseradd $userread -t 8 -p "是否设置密码? " answer || exit 3case $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 ;;esacread -p "请再次输入密码: " password_confirmif [ "$password" == "$password_confirm" ] ; then echo ‘密码设置成功‘ exitelse echo ‘两次密码输入不一致‘ exit 7fi |