linux运维脚本编写,Linux运维常用shell脚本实例 (转)
1、用shell脚本批量建立Linux用户
实现要求:创建用户student1到student50,指定组为student组!而且每个用户需要设定一个不同的密码!
#!/bin/bash
for i in `seq 1 50`
do
useradd -G student student
$i ;
echo student$i | passwd student$i --stdin;
done
【脚本实现如下:说明:Linux下 Passwd有参数 --stdin This option is used to indicate that passwd should read the new password from standard input, which can be a pipe. 所以linux下自动改变用户密码的办法就是: Echo 密码 |passwd –stdin 用户名】-------------------设置相同的密码------------------------
#!/bin/bash
password="123456"
for USER in user1 user2 user3
do
useradd -m $USER
echo -e "${password}\n${password}" | passwd $USER
done
【说明:
echo -n 不换行输出:
$echo -n "123"
$echo "456"
最终输出 123456
而不是
123
456
echo -e 处理特殊字符:
\n 换行且光标移至行首 】
ok,就这么一个简单的脚本,就可以再系统里批量生成账号了。而且密码跟账号的名字一样。
这就是for do done语句用法。
2、批量创建用户
#!/bin/bash
DATE=$(date +%F_%T)
USER_FILE=user.txt
echo_color(){
if [ $1 == "green" ]; then
echo -e "\033[32;40m$2\033[0m"
elif [ $1 == "red" ]; then
echo -e "\033[31;40m$2\033[0m"
fi
}
# 如果用户文件存在并且大小大于0就备份
if [ -s $USER_FILE ]; then
mv
$USER_FILE ${USER_FILE}-${DATE}.bak
echo_color green
"$USER_FILE exist, rename ${USER_FILE}-${DATE}.bak"
fi
echo -e "User\tPassword" >> $USER_FILE
echo "----------------" >> $USER_FILE
for USER in user{1..10}; do
if ! id $USER &>/dev/null; then
PASS=$(
echo $RANDOM |md5sum |cut -c 1-8)
useradd
$USER
echo $PASS |passwd --stdin $USER &>/dev/null
echo -e "$USER\t$PASS" >> $USER_FILE
echo "$USER User create successful."
else
echo_color red
"$USER User already exists!"
fi
done
3.批量添加组用户
添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30
参考答案:
#!/bin/sh
i=1
groupadd class1
while [ $i -le 30 ]
do
if [ $i -le 9 ] ;then
USERNAME=stu0${i}
else
USERNAME=stu${i}
fi
useradd $USERNAME
mkdir /home/$USERNAME
chown -R $USERNAME /home/$USERNAME
chgrp -R class1 /home/$USERNAME
i=$(($i+1))
done
4.批量删除用户
实现自动删除50个账号的功能。账号名为stud1至stud50。
参考脚本:
#!/bin/sh
i=1
while [ $i -le 50 ]
do
userdel -r stud${i}
i=$(($i+1 ))
done
5.批量修改用户密码
旧密码SSH主机信息old_info文件:
# ip user passwd port
192.168.18.217 root 123456 22
192.168.18.218 root 123456 22
修改密码脚本:
#!/bin/bash
OLD_INFO=old_info
NEW_INFO=new_info
for IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); do
USER=$(awk -v I=
$IP 'I==$1{print $2}' $OLD_INFO)
PASS=$(awk -v I=
$IP 'I==$1{print $3}' $OLD_INFO)
PORT=$(awk -v I=
$IP 'I==$1{print $4}' $OLD_INFO)
NEW_PASS=$(mkpasswd -l 8)
echo "$IP $USER $NEW_PASS $PORT" >> $NEW_INFO
expect -c
"
spawn ssh -p$PORT $USER@$IP
set timeout 2
expect {
\"(yes/no)\" {send \"yes\r\";exp_continue}
\"password:\" {send \"$PASS\r\";exp_continue}
\"$USER@*\" {send \"echo \'$NEW_PASS\' |passwd --stdin $USER\r exit\r\";exp_continue}
}"
done
生成新密码new_info文件:
192.168.18.217 root n8wX3mU% 22
192.168.18.218 root c87;ZnnL 22
6、 将目录下大于k的文件转移出去
编写shell脚本,将/usr/local/test目录下大于100k的文件转移到/tmp目录下:
#!/bin/bash
for FILE in `ls /usr/local/test`
do
if [ -f $FILE ] ; then
if [ `ls -l $FILE | awk `{print $5}` -gt 100000 ] ; then
mv $FILE /tmp/
fi
fi
done
================
#!/bin/bash
for FileName in `ls -l /usr/local/test | awk '$5>102400' {print $9}`
do
mv $FileName /tmp/
done
ls -al /tmp/
echo "done!"
7、批量修改文件名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# touch article_{1..3}.html
# ls
article_1.html article_2.html article_3.html
现在想把article改为bbs:
方法1:
for file in $(ls *html);do
mv $file bbs_${file#*_}
# mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')
# mv $file $(echo $file |echo bbs_$(cut -d_ -f2)
done
方法2:
for file in $(find . -maxdepth 1 -name"*html");do
mv $file bbs_${file#*_}
done
方法3:
# rename article bbs *.html
8、ftp自动登录批量下载文件
##### 从ftp服务器上的/home/data 到 本地的/home/databackup####
#!/bin/bash
ftp -n<
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
mget *
close
bye
!
9、ftp自动登录上传文件
####本地的/home/databackup to ftp服务器上的/home/data####
#!/bin/bash
ftp -n<
open 192.168.1.171
user guest 123456
binary
hash
cd /home/data
lcd /home/databackup
prompt
mput *
close
bye
!
10、ftp自动登录下载单个文件
####ftp服务器上下载/home/data/a.sh to local /home/databackup####
#!/bin/bash
ftp -n<
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
get a.sh a.sh
close
bye
!
11、ftp自动登录上传单个文件
####把本地/home/databachup/a.sh up ftp /home/databackup 下####
#!/bin/bash
ftp -n<
open 192.168.1.171
user guest 123456
binary
cd /home/data
lcd /home/databackup
prompt
put a.sh a.sh
close
bye
!
12、获取本机的网络地址
比如:本机的ip地址是:
192.168.100.5/255.255.255.0,
那么他的网络地址是:
192.168.100.1/255.255.255.0
方法一:
#!/bin/bash
IP=ifconfig eth0|grep 'inet addr'|sed 's/^.*addr://g'|awk '{print $1}'
NETMASK=ifconfig eth0 |grep "inet addr"|sed 's/^.*Mask://g'
echo "$IP/&NETMASK"
exit
方法二:
#!/bin/bash
#This script print ip and network
file="/etc/sysconfig/network-scripts/ifcfg-eth0"
if [ -f $file ] ;then
IP=`grep "IPADDR" $file|awk -F"=" '{ print $2 }'`
MASK=`grep "NETMASK" $file|awk -F"=" '{ print $2 }'`
echo "$IP/$MASK"
exit 1
fi
IP地址也可这样获取:IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "
子网掩码:NETMASK= `ifconfig eth0 | grep "inet addr"|cut -f 4 -d ":"
13、判断输入是否为IP
方法1:
function check_ip(){
IP=
$1
VALID_CHECK=$(
echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$">/dev/null; then
if [ $VALID_CHECK == "yes" ]; then
echo "$IP available."
else
echo "$IP not available!"
fi
else
echo "Format error!"
fi
}
check_ip 192.168.1.1
check_ip 256.1.1.1
方法2:
function check_ip(){
IP=
$1
if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
FIELD1=$(
echo $IP|cut -d. -f1)
FIELD2=$(
echo $IP|cut -d. -f2)
FIELD3=$(
echo $IP|cut -d. -f3)
FIELD4=$(
echo $IP|cut -d. -f4)
if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
echo "$IP available."
else
echo "$IP not available!"
fi
else
echo "Format error!"
fi
}
check_ip 192.168.1.1
check_ip 256.1.1.1
增加版:加个死循环,如果IP可用就退出,不可用提示继续输入,并使用awk判断
function check_ip(){
local IP=$1
VALID_CHECK=$(
echo $IP|awk -F. '$1<=255&&$2<=255&&$3<=255&&$4<=255{print "yes"}')
if echo $IP|grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then
if [ $VALID_CHECK == "yes" ]; then
return 0
else
echo "$IP not available!"
return 1
fi
else
echo "Format error! Please input again."
return 1
fi
}
while true; do
read -p "Please enter IP: " IP
check_ip
$IP
[ $? -eq 0 ] &&
break || continue
done
方法3
function check_ip(){
IP=
$1
if [[ $IP =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
FIELD1=$(
echo $IP|awk -F "." '{print $1}')
FIELD2=$(
echo $IP|awk -F "." '{print $2}')
FIELD3=$(
echo $IP|awk -F "." '{print $3}')
FIELD4=$(
echo $IP|awk -F "." '{print $4}')
if [ $FIELD1 -le 255 -a $FIELD2 -le 255 -a $FIELD3 -le 255 -a $FIELD4 -le 255 ]; then
echo "$IP available."
else
echo "$IP not available!"
fi
else
echo "Format error!"
fi
}
check_ip 192.168.0.29
check_ip 288.2.3.4
14、判断输入是否为数字
方法1:
if [[ $1 =~ ^[0-9]+$ ]]; then
echo "Is Number."
else
echo "No Number."
fi
方法2:
if [ $1 -gt 0 ] 2>/dev/null; then
echo "Is Number."
else
echo "No Number."
fi
方法3:
echo $1 |awk '{print $0~/^[0-9]+$/?"Is Number.":"No Number."}' #三目运算符
DIR=
$1
KEY=
$2
for FILE in $(find $DIR -type f); do
if grep $KEY $FILE &>/dev/null; then
echo "--> $FILE"
fi
done
(转) https://blog.csdn.net/bbwangj/article/details/73480480
转载于:https://www.cnblogs.com/wenxingxu/p/9437130.html
linux运维脚本编写,Linux运维常用shell脚本实例 (转)相关推荐
- 大数据常用shell脚本之fl脚本
一.前置准备 CentOS7.jdk1.8.zookeeper-3.5.7.kafka-2.4.1.flume-1.9.0 想要完成本期视频中所有操作,需要以下准备: Flume安装及基本使用-视频教 ...
- 大数据常用shell脚本之kf脚本
一.前置准备 CentOS7.jdk1.8.zookeeper-3.5.7.kafka-2.4.1 想要完成本期视频中所有操作,需要以下准备: Kafka集群环境搭建-视频教程 大数据常用shell脚 ...
- Linux常用Shell脚本珍藏
我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...
- linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本
在Linux上检查用户登录成功与失败的shell脚本 Linux管理员的典型任务之一是检查Linux系统中成功和失败的登录尝试. 手动验证它们非常困难,因为" /var/log/secure ...
- linux经典脚本实例,Linux常用Shell脚本珍藏
[实例简介] Linux常用Shell脚本珍藏 (2)编写任务定时器: C代码☆ 1. echo 00 1 *k */bin/sh /usr/bin/fileback">:/root/ ...
- Linux 常用Shell脚本,后端开发必备
Linux 常用Shell脚本,后端开发必备 文章目录 Linux 常用Shell脚本,后端开发必备 1 用户猜数字 2 查看有多少远程的 IP 在连接本机 3 helloworld 4 打印 tom ...
- 扫盲 Linux&UNIX 命令行——从“电传打字机”聊到“shell 脚本编程”
扫盲 Linux&UNIX 命令行--从"电传打字机"聊到"shell 脚本编程" 本文目标读者 虽然本文的标题号称是[扫盲],但俺相信:即使是一些 P ...
- 在linux中写php语言吗,将PHP作为Shell脚本语言使用
我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短--).但是只有很少数的人意识到PHP也可以很好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并没有P ...
- linux shc shell脚本_使用shc工具加密shell脚本详解
Shc可以用来对shell脚本进行加密,可以将shell脚本转换为一个可执行的二进制文件.经过shc对shell脚本进行加密后,会同时生成两种个新的文件,一个是加密后的可执行的二进制文件(文件名以.x ...
- Shell脚本编程之(一)Shell脚本简介
什么是Shell脚本 shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭 ...
最新文章
- Win7 SP1语言包微软官方下载地址及使用方法 2
- 通用机器学习流程与问题解决架构模板
- unity, 非public变量需要加[SerializeField]才能序列化
- Python之路----------内置函数
- 乐迪智能陪伴机器人_【团品】AI未来人工智能陪伴机器人(爆款复团)
- colab文件夹上传到github
- html5包含哪些知识,HTML5新知识
- SQL语句大全,所有的SQL都在这里 !极度建议收藏...
- 微软开源的Trill是什么?
- select里加链接
- [Python爬虫] 之十八:Selenium +phantomjs 利用 pyquery抓取电视之家网数据
- asio定时器深度探析
- centos的一次性任务at和周期性任务crontab
- ObjectARX代码片段三
- 基于C语言的菜鸟驿站管理系统
- 华为手机怎么语音服务器,华为p20怎么语音朗读
- linux长传大文件,linux大文件传输
- Sniffer报文捕获解析
- 易康(eCognition)对象几何特征--1:几何(Geometry)_范围(Extent)
- SMSAlarm短信猫语音猫快速连接
热门文章
- mysql的锁定机制_MySQL锁定机制
- linux网站目录大小写,Linux服务器url区分大小写如何解决
- mysql三个字段最优索引_mysql 多列索引优化
- python判断路径是文件还是文件夹_python之判断是否是目录或文件
- java中并行_[JAVA] 12. Java中的并行Concurrency
- git checkout .的用法
- 阿里云服务centOS7下安装rabbitmq
- stm32 内部sram大小_STM32第三天
- python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹
- date转换成string hive_[转] String to Date conversion in hive - 在 Hive 中各种字符串转换成日期格式...