脚本案例(一)

本文涵盖了一系列脚本案例,包括万能解压、文件批量创建用户、利用select命令、检查IP连通性、用户管理、查找可连接用户及数据库备份等。在用户批量创建中强调了密码和用户文件的校验,以及错误处理。脚本5通过case语句实现了用户添加和删除功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

脚本1:万能解压
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
  unzip "$1" ;;
"$1: gzip compressed"*)
  gunzip "$1" ;;
"$1: bzip2 compressed"*)
  bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac
脚本2:文件批量建立用户
#!/bin/bash
[ "$#" -ne "2" ]&&{         #判断脚本后是否为两个变量(用户文件和密码文件)
        echo please input userfile and passfile
        exit 1
}
MAX_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $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
脚本2_plus

要求:
1.检查密码文件和用户文件行数是否匹配
2.检查文件是否存在
3.用户存在时报错,不更改密码
4.文件数量错误报错

#!/bin/bash
check_file()    #检查文件有效性和数目
{
    if
    [ "$#" -ne "2" ]
then 
    echo "Input File"
    exit 0
elif
    [ ! -e "$1" ]||[ ! -e "$2" ]
then
    echo "F ds n exist"
    exit 0
    fi
}
check_line()    #检查行数函数
{
USER_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
PASS_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $2`
if
    [ $USER_LINE -gt $PASS_LINE ]
then
    echo ERROR LINE in PASSFILE
elif
    [ $USER_LINE -lt $PASS_LINE ]
then
    echo ERROR LINE in USERFILE
else
    useradd "$USERNAME" "$PASSNAME"
fi

    echo checkline_$1
}
check_file "$1" "$2"
check_line "$1" "$2"
for LINE_NUM in `seq 1 $PASS_LINE`
do
        USERNAME=`sed -n "${LINE_NUM}p" $1`
        PASSWORD=`sed -n "${LINE_NUM}p" $2`
        useradd $USERNAME
        [ "$?" -eq "0" ]&&{     #返回之不为0时执行
    echo $PASSWORD | passwd --stdin $USERNAME&> /dev/null && echo $USERNAME exists
}
done
[root@141 mnt]# sh user_create.sh userfile passfile 

checkline_userfile
useradd:用户“vincent”已存在
useradd:用户“hello”已存在
useradd:用户“westos”已存在
脚本3:select命令的应用
[root@localhost ~]# cat select.sh 
#!/bin/bash
echo "What is your favourite langusge"
select var in "English" "German" "Spanish";do
    break
done
echo "You have selected $var"
[root@localhost ~]# sh select.sh
What is your favourite langusge
1) English
2) German
3) Spanish
#? 1
You have selected English
脚本4:检查ip是否可以连接
[root@localhost ~]# cat check_ip.sh 
#!/bin/bash
read -p "Input IP:" -s IP
#ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
ping -c1 -w1 $IP 

[ $? -ne 0 ]&&echo $IP is down || echo $IP is up
[root@localhost ~]# sh check_ip.sh 
Input IP:PING 172.25.254.56 (172.25.254.56) 56(84) bytes of data.
64 bytes from 172.25.254.56: icmp_seq=1 ttl=64 time=1.41 ms

--- 172.25.254.56 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.419/1.419/1.419/0.000 ms
172.25.254.56 is up
脚本5:控制添加删除用户
[root@141 mnt]# cat user_ctrl.sh 
#!/bin/bash
ACTION_ADD(){

    [ "$action" = "add" ] &> /dev/null &&{
        read -p "Input username: " USERNAME
        useradd $USERNAME                                                         
        read -p "Input password: " PASSWORD
        echo $PASSWORD | passwd --stdin $USERNAME
}
}
ACTION_DEL(){   
    [ "$action" = "del" ] &> /dev/null &&{     
        read -p "Input username: " USERNAME
         userdel -r $USERNAME      
}
}
user_ctrl()
{
    read -p "Input the action: " action
    [ "$action" = "exit"  ]&&{
        echo exit
        exit 0
}

ACTION_ADD 
ACTION_DEL 
user_ctrl
}
user_ctrl

使用case语句实现用户添加或删除

#!/bin/bash
case $3 in
        add)
check_file()
{
        if
        [ "$#" -ne "2" ]
then
        echo "Input File"
        exit 0
elif
        [ ! -e "$1" ]||[ ! -e "$2" ]
then

        echo "F ds n exist"
        exit 0
        fi
}
check_line()
{
USER_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
PASS_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $2`
if
        [ $USER_LINE -gt $PASS_LINE ]
then
        echo ERROR LINE in PASSFILE
elif
        [ $USER_LINE -lt $PASS_LINE ]
then
        echo ERROR LINE in USERFILE
else
        useradd $1

fi
        echo checkline_$1
}
check_file "$1" "$2"
check_line "$1" "$2"
for LINE_NUM in `seq 1 $PASS_LINE`
do
        USERNAME=`sed -n "${LINE_NUM}p" $1`
        PASSWORD=`sed -n "${LINE_NUM}p" $2`
        useradd $USERNAME
        [ "$?" -eq "0" ]&&{
        echo $PASSWORD | passwd --stdin $USERNAME&> /dev/null && echo $USERNAME exists
}
done
        ;;
        del)
USER_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $1`
PASS_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $2`
for LINE_NUM in `seq 1 $PASS_LINE`
do
        USERNAME=`sed -n "${LINE_NUM}p" $1`
        PASSWORD=`sed -n "${LINE_NUM}p" $2`
        userdel -r $USERNAME
done
        ;;
        *)
        echo error
esac
[root@141 Desktop]# sh userctrl.sh userfile psfile add
useradd: user 'userfile' already exists
checkline_userfile
123 exists
456 exists
879 exists
脚本6:查看可以建立连接的用户
[root@141 mnt]# cat check_host.sh 
#!/bin/bash

for NUM in `seq 1 254`
do
ping -c1 -w1 "172.25.254.$NUM" &> /dev/null && echo "172.25.254.$NUM"||continue
done

[root@141 mnt]# sh check_host.sh 
172.25.254.79
172.25.254.141
172.25.254.241
脚本7:备份数据库

新建数据库:

[root@141 ~]# mysql -uroot
MariaDB [(none)]> create database new_database
    -> ;
MariaDB [(none)]> use new_database;
Database changed
MariaDB [new_database]> create table usre(
    -> username varchar(50) not null,
    -> passwd varchar(20) not null);

MariaDB [new_database]> insert into usre values("user1","122");

MariaDB [new_database]> insert into usre values("user2","221");

MariaDB [new_database]> select * from usre;
+----------+--------+
| username | passwd |
+----------+--------+
| user1    | 122    |
| user2    | 221    |
+----------+--------+
2 rows in set (0.00 sec)

显示数据库的一种方式:

[root@141 ~]# mysql -uroot -EN

MariaDB [(none)]> show databases;
*************************** 1. row ***************************
information_schema          
*************************** 2. row ***************************
daba-test
*************************** 3. row ***************************
mysql
*************************** 4. row ***************************
new_database
*************************** 5. row ***************************
new_db
*************************** 6. row ***************************
performance_schema
*************************** 7. row ***************************
redhat
*************************** 8. row ***************************
test
*************************** 9. row ***************************
ultrax
9 rows in set (0.00 sec)

数据库中的Schema,为数据库对象的集合,一个用户一般对应一个schema。

mysql -uroot -EN "show databases;"   #显示所有数据库
grep -E "^\*|schema$" -v` 过滤掉*开头和schema结尾的字符行,即所有数据库名
 mysqldump -uroot $DATABASE_NAME > /mnt/mysql_dump/${DATABASE_NAMW}.sql       #备份数据库到相应.sql文件中
#!/bin/bash

DATABASE_MESSAGE=`mysql -uroot -EN -e "show databases;" | grep -E "^\*|schema$" -v`     
mkdir -p /mnt/mysql_dump
for DATABASE_NAME in $DATABASE_MESSAGE
do
        mysqldump -uroot $DATABASE_NAME > /mnt/mysql_dump/${DATABASE_NAMW}.sql
        [ "$?" -eq "0" ]&&{
                echo -e "$DATABASE_NAME is backuped!"

}
done
[root@141 ~]# sh database.sh 
daba-test is backuped!
mysql is backuped!
new_database is backuped!
new_db is backuped!
redhat is backuped!
test is backuped!
ultrax is backuped!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值