脚本编写(练习)

元字符 # * ?
#####awk
{print $1}打印第一列
对文件行操作
awk ‘/bash/{print}’ passwd(以bash结尾的行)

awk -F : ‘NR==3{print $1}’ passwd(第三行第一列)
awk 'BEGIN{print NAME}'在开始之前先打印NAME
awk -F ‘BEGIN{print “NAME”}{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 1}̲END{print "west…/{print $1}’(以bash结尾的行的第一列)

awk -F ‘/1/{print}’ /etc/passwd 以a到d开头的
awk -F : ‘^r|bash$/{print}’ /etc/passwd r开头 bash 结尾

awk -F : ‘ 6   / b i n 6~/bin 6 /bin/{print}’ /etc/passwd 第六列以bin 结尾的

awk -F : 'KaTeX parse error: Expected group after '^' at position 5: 6!~/^̲\/home/ && /bas…/{print $1}'统计能登陆系统且不再home目录下的用户

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
写一个脚本查看一个device的ip
awk '/inet/{print $2}'直接查关于inet的行 打印第二列

在这里插入图片描述

查看到eth0的ip是214
在这里插入图片描述

########脚本
自动生成脚本头文件
vim /etc/vimrc

map ms:call WESTOS()'s

function WESTOS()
call append(0,"#####################################")
call append(1,"#Author: #")
call append(2,"#Creat_Time: “.strftime(”%Y-%m-%d")." “)
call append(3,”#Version: #")
call append(4,"#Mail: #")
call append(5,"#####################################")
endfunction

#!/bin/bash(幻术看是注释了,其实调用了)
调用脚本的方式
. test.sh
source test.sh(前两个调用会显示文件内容)
sh test.sh(这个不会)
或者chmod +x text.sh
./test.sh(只能在当前目录调用)
在这里插入图片描述

在这里插入图片描述
建立脚本文件
在这里插入图片描述
按F9会出来
在这里插入图片描述

写一个清空日志的脚本
在这里插入图片描述

注意:我是一步一步试验用命令截取
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

将命令写入脚本
grep RULES /etc/rsyslog.conf -A 91 | awk ‘!/#/&&!/$/{print $2}’ | sed ‘/^:/d;s/-//g’ > /mnt/file3

#!/bin/bash
[ " U S E R " = " r o o t " ] ∣ ∣ e c h o " e r r o r , m u s t b e r o o t " e x i t M a x l i n e = ‘ s e d − n ′ USER" = "root" ] || { echo "error,must be root" exit } Max_line=`sed -n ' USER"="root"]echo"error,mustberoot"exitMaxline=sedn=’ /etc/rsyslog.confTarget_Log=grep RULES /etc/rsyslog.conf -A KaTeX parse error: Expected group after '^' at position 18: …x_line |awk '!/^̲#/&&!/^/{print $2}’|sed ‘/^:/d;s/-//g’ `
for Log_File in $Target_Log
do
> $Log_File && {
echo $Log_file is cleard
}
done
在这里插入图片描述

脚本中的变量
当前环境下的变量
退出就没了

只有这个用户下才能用用户的环境配置文件: vim .bash_profile()
写a=1
test.sh
里面写 $a
这时sh test.sh
可以出来 1

系统的环境变量 vim /etc/profile
里面写a=1
vim /etc/profile(系统环境变量)
在里面写a=3
vim /etc/bashrc(当前shell变量)
b=6
su student
echo $a
echo $b
看输出值
退出
vim /etc/profile 该a=5
source /etc/profile(刷新文件)
su - student 切换环境变量和用户变量
echo $a
echo $b

su student 值切换用户变量(还用的切换前的环境变量)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

变量引用echo"x" 强引’’

不能引用的元字符` \ ! ?
在这里插入图片描述
##变量值传递
写一个脚本vim test.sh
echo $0 is $0
echo $1 is $1
echo $2 is $2
echo $3 is $3
echo $# is $#
echo $* is $*
echo $@ is $@

运行sh test.sh westos linux
$0 is test.sh 脚本名称
$1 is westos 脚本后跟的第一串字符
$2 is linux
$3 is
$# is 2 根的有几段字符
$* is westos linux 脚本后根的所有字符串输出为一个整体
$@ is westos linux 脚本后根的所有字符串输出为个体

在这里插入图片描述

####read
read -p “input” westos
读取输入的内容
read -p “haha” A
echo “$A”
在这里插入图片描述

在这里插入图片描述
写脚本用read 测试网通不通
在这里插入图片描述

在这里插入图片描述

##########################
命令别名

alias xie=‘vim’ ###临时设定,退出shell或切换用户都会不生效
unalias xie 取消设定

vim .bashrc 永久设定shell环境
source .bashrc刷新设定时生效
alias xie=‘vim’

vim /etc/bashrc 用久设定(所有用户生效)
alias xie=‘vim’

vim /etc/profile 写了以后切换用户su - 用户生效 su 用户不生效

Hostname=$(hostname)
Hostname=hostname
反单引比较好
&? 命令的退出值(0-255)不是0 每个值代表不同的报错信息,则是错的

写脚本exit 后加数字,可以改成自己的退出值

在这里插入图片描述

#编写用户建立脚本

逐步编写在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
#数组

shell中的语句
for
while
if
case
expect
exit(退出脚本) break(跳出循环) continue(跳出此次循环,执行下次循环)

在这里插入图片描述

在这里插入图片描述
#while 循环
while true
do
read -p "please input word: " WORD
echo $WORD
done

##for循环
for i {1…10}
do
echo $i
done

a=1 b=2

for i seq $a $b
do
echo $i
done

在这里插入图片描述

在这里插入图片描述

#if语句
if
then
elif
then
else
fi

写一个脚本,建立一个文件(userfile)中的用户,并读取passfile中的密码
如果脚本后文件名少于两个报错,如果用户存在报告用户存在

if [ $# -lt 2 ]
then
echo “please input two file names”
elif [ ! -e $1 ]
then
echo “$1 is not exist”
elif [ ! -e $2 ]
then
echo “$2 is not exist”
else
Num=awk 'BEGIN{N=0}{N++}END{print N}' userfile
for I in seq 1 $Num
do
USERNAME=sed -n ${I}P userfile
PASSWD=sed -n ${I}P passwdfile
getent passwd KaTeX parse error: Expected 'EOF', got '&' at position 10: USERNAME &̲> /dev/null if …?" = “0” ]
then
echo $USERNAME is exist
else
useradd $USERNAME
echo $PASSWD | passwd --stdin $USERNAME > /dev/null
echo $USERNAME is created
fi
done
fi
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
#case语句
在这里插入图片描述

在这里插入图片描述
#expect
写一个自动ssh脚本用exp脚本执行

写一个会回答问题的脚本
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Auto_SSH()
{
/usr/bin/expect <<-EOF
spawn ssh root@$1 hostname
expect{
“yes/no” { send “yes\r” ; exp_continue }
“password” { send “Asimov\r”}
}
expect eof
EOF
}

for IP in {60…70}
do
ping -c1 -w1 172.25.254.KaTeX parse error: Expected 'EOF', got '&' at position 4: IP &̲> /dev/null …?" = “0” ]
then
Auto_SSH 172.25.254.$IP
fi

输入重定向2<<EOF
1

EOF

在这里插入图片描述
结果(。。。)
在这里插入图片描述

输入重定向2<<EOF
1

EOF
将后面1输入到2环境中

脚本中的结束语句

exit n 实现脚本退出
break 退出循环,不执行后面的
continue 执行前一次循环,后面的跳过

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


  1. a-d ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值