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脚本实例 (转)相关推荐

  1. 大数据常用shell脚本之fl脚本

    一.前置准备 CentOS7.jdk1.8.zookeeper-3.5.7.kafka-2.4.1.flume-1.9.0 想要完成本期视频中所有操作,需要以下准备: Flume安装及基本使用-视频教 ...

  2. 大数据常用shell脚本之kf脚本

    一.前置准备 CentOS7.jdk1.8.zookeeper-3.5.7.kafka-2.4.1 想要完成本期视频中所有操作,需要以下准备: Kafka集群环境搭建-视频教程 大数据常用shell脚 ...

  3. Linux常用Shell脚本珍藏

    我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...

  4. linux脚本登录启动失败,在Linux上检查用户登录成功与失败的shell脚本

    在Linux上检查用户登录成功与失败的shell脚本 Linux管理员的典型任务之一是检查Linux系统中成功和失败的登录尝试. 手动验证它们非常困难,因为" /var/log/secure ...

  5. linux经典脚本实例,Linux常用Shell脚本珍藏

    [实例简介] Linux常用Shell脚本珍藏 (2)编写任务定时器: C代码☆ 1. echo 00 1 *k */bin/sh /usr/bin/fileback">:/root/ ...

  6. Linux 常用Shell脚本,后端开发必备

    Linux 常用Shell脚本,后端开发必备 文章目录 Linux 常用Shell脚本,后端开发必备 1 用户猜数字 2 查看有多少远程的 IP 在连接本机 3 helloworld 4 打印 tom ...

  7. 扫盲 Linux&UNIX 命令行——从“电传打字机”聊到“shell 脚本编程”

    扫盲 Linux&UNIX 命令行--从"电传打字机"聊到"shell 脚本编程" 本文目标读者 虽然本文的标题号称是[扫盲],但俺相信:即使是一些 P ...

  8. 在linux中写php语言吗,将PHP作为Shell脚本语言使用

    我们都知道,PHP是一种非常好的动态网页开发语言(速度飞快,开发周期短--).但是只有很少数的人意识到PHP也可以很好的作为编写Shell脚本的语言,当PHP作为编写Shell脚本的语言时,他并没有P ...

  9. linux shc shell脚本_使用shc工具加密shell脚本详解

    Shc可以用来对shell脚本进行加密,可以将shell脚本转换为一个可执行的二进制文件.经过shc对shell脚本进行加密后,会同时生成两种个新的文件,一个是加密后的可执行的二进制文件(文件名以.x ...

  10. Shell脚本编程之(一)Shell脚本简介

    什么是Shell脚本 shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭 ...

最新文章

  1. Win7 SP1语言包微软官方下载地址及使用方法 2
  2. 通用机器学习流程与问题解决架构模板
  3. unity, 非public变量需要加[SerializeField]才能序列化
  4. Python之路----------内置函数
  5. 乐迪智能陪伴机器人_【团品】AI未来人工智能陪伴机器人(爆款复团)
  6. colab文件夹上传到github
  7. html5包含哪些知识,HTML5新知识
  8. SQL语句大全,所有的SQL都在这里 !极度建议收藏...
  9. 微软开源的Trill是什么?
  10. select里加链接
  11. [Python爬虫] 之十八:Selenium +phantomjs 利用 pyquery抓取电视之家网数据
  12. asio定时器深度探析
  13. centos的一次性任务at和周期性任务crontab
  14. ObjectARX代码片段三
  15. 基于C语言的菜鸟驿站管理系统
  16. 华为手机怎么语音服务器,华为p20怎么语音朗读
  17. linux长传大文件,linux大文件传输
  18. Sniffer报文捕获解析
  19. 易康(eCognition)对象几何特征--1:几何(Geometry)_范围(Extent)
  20. SMSAlarm短信猫语音猫快速连接

热门文章

  1. mysql的锁定机制_MySQL锁定机制
  2. linux网站目录大小写,Linux服务器url区分大小写如何解决
  3. mysql三个字段最优索引_mysql 多列索引优化
  4. python判断路径是文件还是文件夹_python之判断是否是目录或文件
  5. java中并行_[JAVA] 12. Java中的并行Concurrency
  6. git checkout .的用法
  7. 阿里云服务centOS7下安装rabbitmq
  8. stm32 内部sram大小_STM32第三天
  9. python人生的不同阶段_从入门到入土的Python自学教程,用改变你的人生轨迹
  10. date转换成string hive_[转] String to Date conversion in hive - 在 Hive 中各种字符串转换成日期格式...