脚本的练习示例一

  • 显示系统中能登陆系统的用户

[root@desktop27 mnt]# vim show_loginuser.sh
[root@desktop27 mnt]# cat show_loginuser.sh 
#!/bin/bash
SHELL=$(echo `grep -v nologin /etc/shells` | sed 's/ /|/g')
grep -E "$SHELL" /etc/passwd | cut -d : -f 1
[root@desktop27 mnt]# chmod +x show_loginuser.sh 
[root@desktop27 mnt]# /mnt/show_loginuser.sh 
root
student
[root@desktop27 mnt]# useradd -s /bin/tcsh tutu
[root@desktop27 mnt]# su - tutu
[tutu@desktop27 ~]$ logout 
[root@desktop27 mnt]# /mnt/show_loginuser.sh 
root
student
tutu
[root@desktop27 mnt]#
  • 显示ip

[root@desktop27 mnt]# ifconfig eth0 | awk -F " " '/inet\>/{print $2}'
172.25.254.127
[root@desktop27 mnt]# awk -F "=" '/^IPAD/{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0 
172.25.254.127
[root@desktop27 mnt]# vim file.sh
[root@desktop27 mnt]# cat file.sh
#!/bin/bash
ifconfig eth0 | awk -F " " '/inet\>/{print $2}'
[root@desktop27 mnt]# sh file.sh
172.25.254.127
[root@desktop27 mnt]#
  • 统计行数

[root@desktop27 mnt]# awk 'BEGIN{N=0}{N++}END{print N}' passwd 
12
[root@desktop27 mnt]# vim test.sh
[root@desktop27 mnt]# cat test.sh
#!/bin/bash
awk 'BEGIN{N=0}{N++}END{print N}' passwd
[root@desktop27 mnt]# sh test.sh
12
[root@desktop27 mnt]# 
  • 执行脚本:安装 httpd,并修改端口为所跟port

[root@desktop27 mnt]# vim install_apache.sh
[root@desktop27 mnt]# cat install_apache.sh 
#!/bin/bash
[ "$#" -eq "1" ]||{
    echo "Please input port after script!!"
    exit 1
}
yum install httpd -y &> /dev/null
sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd
echo -e "\033[32mThe Listen is changed!!\033[0m"
netstat -antulpe | grep http
[root@desktop27 mnt]# sh install_apache.sh 80
The Listen is changed!!
tcp6       0      0 :::443                  :::*                    LISTEN      0          69833      4800/httpd          
tcp6       0      0 :::80                   :::*                    LISTEN      0          69815      4800/httpd          
[root@desktop27 mnt]#
  • 实现在执行脚本后跟两个参数,userfile、passfile,创建userfile中的用户,并添加passfile中的密码给用户

[root@desktop27 mnt]# vim userfile
[root@desktop27 mnt]# vim passfile 
[root@desktop27 mnt]# cat userfile 
user1
user2
user3
[root@desktop27 mnt]# cat passfile 
user1123
user2123
user3123
[root@desktop27 mnt]# vim create_user.sh
[root@desktop27 mnt]# cat create_user.sh 
#!/bin/bash
MAX_LINE=`wc -l $1 | cut -d " " -f 1`
for LINE_NUM in `seq 1 $MAX_LINE`
do
    sed -n "${LINE_NUM}p" $1
    sed -n "${LINE_NUM}p" $2
done
[root@desktop27 mnt]# sh create_user.sh userfile passfile 
user1
user1123
user2
user2123
user3
user3123
[root@desktop27 mnt]# vim create_user.sh 
[root@desktop27 mnt]# cat create_user.sh 
#!/bin/bash
MAX_LINE=`wc -l $1 | cut -d " " -f 1`
for LINE_NUM in `seq 1 $MAX_LINE`
do
    USERNAME=`sed -n "${LINE_NUM}p" $1`
    PASSWORD=`sed -n "${LINE_NUM}p" $2`
    useradd $USERNAME
    echo $PASSWORD | passwd --stdin $USERNAME
done
[root@desktop27 mnt]# sh create_user.sh userfile passfile 
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
[root@desktop27 mnt]#
  • 前一脚本的改进:若没有跟两个文件参数,将报错

[root@desktop27 mnt]# vim create_user.sh 
[root@desktop27 mnt]# cat create_user.sh 
#!/bin/bash
[ "$#" -ne "2" ]&&{
    echo -e "\033[31mERROR:please input userfile and passwordfile\033[0m"
    exit 1
}
MAX_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
for LINEMAX in `seq 1 $MAX_LINE`
do
         USERNAME=$(sed -n "${LINEMAX}P" $1)
         PASSWORD=$(sed -n "${LINEMAX}P" $2)
         useradd $USERNAME
         echo $PASSWORD | passwd --stdin $USERNAME
done
[root@desktop27 mnt]# sh create_user.sh 
ERROR:please input userfile and passwordfile
[root@desktop27 mnt]# sh create_user.sh userfile 
ERROR:please input userfile and passwordfile
[root@desktop27 mnt]# sh create_user.sh userfile passfile 
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
[root@desktop27 mnt]#
  • 再次改进:实现交互

[root@desktop27 mnt]# vim create_user.sh 
[root@desktop27 mnt]# cat create_user.sh 
#!/bin/bash
read -p "Please input userfile:" USER
[ -e "$USER" ]||{
    echo -e "\033[31mERROR: $USER is not exist!!\033[0m"
    exit 1
}
read -p "Please input passwordfile:" PASSWORDFILE
[ -e "$PASSWORDFILE" ]||{
    echo "\033[31mERROR: $PASSWORDFILE is not exist!!\033[0m"
    exit 1
}
MAX_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $USER`
for LINEMAX in `seq 1 $MAX_LINE`
do
         USERNAME=$(sed -n "${LINEMAX}P" $USER)
         PASSWORD=$(sed -n "${LINEMAX}P" $PASSWORDFILE)
         useradd $USERNAME
         echo $PASSWORD | passwd --stdin $USERNAME
done
[root@desktop27 mnt]# sh create_user.sh 
Please input userfile:userfile
Please input passwordfile:passfile
Changing password for user user1.
passwd: all authentication tokens updated successfully.
Changing password for user user2.
passwd: all authentication tokens updated successfully.
Changing password for user user3.
passwd: all authentication tokens updated successfully.
[root@desktop27 mnt]#
  • 脚本中的函数


    脚本中的函数是把一个复杂的语句块定义成一个字符串的方法
    例如:
  • 例一

[root@desktop27 mnt]# vim file.sh 
[root@desktop27 mnt]# cat file.sh 
#!/bin/bash
PING()
{
    read -p "Please input a idaddress: " IP
    ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
    PING
}
PING
[root@desktop27 mnt]# sh file.sh 
Please input a idaddress: 172.25.254.127
172.25.254.127 is up
Please input a idaddress: 172.25.254.227
172.25.254.227 is down
Please input a idaddress: 172.25.254.50
172.25.254.50 is up
Please input a idaddress: ^C
[root@desktop27 mnt]# 
##因为脚本中没有退出设定,所以 crtl+c 退出
  • 例一改进

[root@desktop27 mnt]# vim file.sh 
[root@desktop27 mnt]# cat file.sh 
#!/bin/bash
PING()
{
    read -p "Please input a idaddress: " IP
    [ "$IP" = exit ]&&{
        echo bye
        exit 0
    }
    ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
    PING
}
PING
[root@desktop27 mnt]# sh file.sh 
Please input a idaddress: 172.25.254.127
172.25.254.127 is up
Please input a idaddress: exit
bye
[root@desktop27 mnt]#
  • 例二

[root@desktop27 mnt]# vim file_check.sh
[root@desktop27 mnt]# cat file_check.sh 
#!/bin/bash
FILE_CHECK()
{
    [ "$1" "$2" ]&&{
        echo $2 is $3
        exit 0
    }
}
[ -e "$1" ]||{
    echo $1 is not exist!!
    echo 0
}
FILE_CHECK -L $1 link
FILE_CHECK -f $1 file
[root@desktop27 mnt]# sh file_check.sh /etc/system-release
/etc/system-release is link
[root@desktop27 mnt]# sh file_check.sh /etc/passwd
/etc/passwd is file
[root@desktop27 mnt]# 
  • 例三

[root@desktop27 mnt]# vim useraction_check.sh
[root@desktop27 mnt]# cat useraction_check.sh 
#!/bin/bash
USERADD(){
    [ "$1" = add ]&&{
    read -p "plesae input addusername: " USERA
        read -p "plesae input addpassword: " -s PASSWORD
        echo ""
    useradd  $USERA
        echo $PASSWORD | passwd --stdin $USERA
        }
}
USERDEL(){
    [ "$1" = del ]&&{
        read -p "plesae input username: " USERNAME
        userdel -r $USERNAME
    }
}
USERACTION(){
    read -p "please input action: " ACTION
    [ "$ACTION" = exit ]&&{
        echo "bye"
        exit 0
    }
    USERADD $ACTION
    USERDEL $ACTION
    USERACTION
}
USERACTION
[root@desktop27 mnt]# sh useraction_check.sh 
please input action: add
plesae input addusername: tutu
plesae input addpassword: 
Changing password for user tutu.
passwd: all authentication tokens updated successfully.
please input action: del
plesae input username: tutu
please input action: add
plesae input addusername: user1
plesae input addpassword: 
Changing password for user user1.
passwd: all authentication tokens updated successfully.
please input action: del
plesae input username: user1
please input action: exit
bye
[root@desktop27 mnt]#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值