声明:所有文章只作为学习笔记用,转载非原创
顺序执行多条命令:command1;command2;command3;
有条件的执行多条命令:which command1 && command2 || command3
expect 命令 https://www.cnblogs.com/saneri/p/10819348.html
awk 数组
print 与 printf 格式化输出
管道是一种通信机制,通常用于进程间的通信(也可通过socket进行网络通信),它表现出来的形式将前面每一个进程的输出(stdout)直接作为下一个进程的输入(stdin)。
管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行
![image](https://img.haomeiwen.com/i12275317/f08758db656b340b.png?imageMogr2/auto-orient/strip|imageView2/2/w/455/format/webp)
#上传下载 ftp
非交互式 下载文件 https://www.jianshu.com/p/71e9c9a9c31f
#!/bin/bash
#上传文件
ftp -n<<-EOF
open ftpIP #FTP服务器IP
user ftpUser ftpPasswd #用户名 密码
passive #被动模式 active 主动模式
binary # 二进制传输
hash #切换散列符号(#)打印
cd Up/ #ftp上文件目录
lcd /home/... #本地目录
prompt #切换交互式提示
mput *#多文件上传 单文件上传put
close
bye #退出
EOF
echo "commit to ftp successfully"
#下载文件
ftp -n <<EOF
open ftpIP
user ftpUser ftpPasswd
passive
binary
cd Down/
lcd /home/...
hash
prompt off
mget *
close
bye
EOF
echo "download from ftp successfully"
#
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if ! crontab -l | grep ntpdata &>/dev/null ; then
(echo "* 1 * * * ntp time.windows.com >/dev/null 2>&1" ; crontab -l ) | crontab
sed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinx/config
#历史命令显示操作时间
if ! grep HISTTIMEFORMAT /etc/bashrc; then
echo `export HISTTIMEFORMAT="%F %T `whoami` "` >> /etc/bashrc
fi
#禁止定时任务发送邮件
sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab
#循环创建目录:
cat yh.txt
gsyh
xyyh
zsyh
zdyh
#!/bin/bash
id=(B1111 B2222 B3333 B4444)
for i in `cat /workshare/yh.txt`
do
mkdir -p /workshare/dir/$i/
for((l=0;l<${#id[*]};l++))
do
mkdir -p /workshare/dir/$i/${id[l]}/{1_upload,2_upload}
done
done
#创建多个用户
#!/bin/bash
#接受参数
user_list=$@
#生成最后的文件
user_file=./user.info
for user in $user_list; do
if ! id $user &>/dev/null; then
pass =$(echo $RANDOM | md5sum |cut -c 1-8)
useradd $user
echo $pass | passwd --stdin $user
# stdin 从标准输入管道读入新的密码
echo "$pass $user" >> $user_file
echo " $user create sucess"
else
echo "$user already exist"
fi
done
#监测磁盘等
多种写法:https://blog.csdn.net/qq_43595047/article/details/84034858
#!/bin/bash
function cpu(){
util=$(vmstat | awk '{if(NR==3) print $13+$14}')
iowait=$(vmstat | awk '{if(NR==3) print $16}')
echo "cpu 使用率: ${util}% , 等待磁盘IO响应使用率 ${iowait}%"
}
function mem(){
total=$(free -m | awk '{if(NR==2) printf "%.1f", $2/1024}')
used=$(free -m | awk '{if(NR==2) printf "%.1f", ($2-$NF)/1024}')
available=$(free -m | awk '{if(NR==2) printf "%.1f", $NF/1024}')
echo "内存总大小: ${total}G "
echo "使用总大小: ${used}G "
echo "可用总大小: ${available}G "
}
function disk(){
fs=$(df -h | awk '/^\/dev/{print $1}')
# 本机电脑会多匹配需要改正
for p in $fs; do
mounted=$(df -h |awk -v v1=$p '$1==v1{print $NF}')
#size,used 同上
echo "硬盘挂载点为 ${mounted}"
done
used=$(free -m | awk '{if(NR==2) printf "%.1f", ($2-$NF)/1024}')
available=$(free -m | awk '{if(NR==2) printf "%.1f", $NF/1024}')
echo "内存总大小: ${total}G "
echo "使用总大小: ${used}G "
echo "可用总大小: ${available}G "
}
function tcp_statut(){
#利用awk数组取出值
echo tcp_status=`netstat -natlp | awk '{arry[$6]++} END{for(i in arry) printf i":"arry[i]" "}'`
}
cpu
mem
#awk数组 可以异步awk 单元
key 和 value
array[index] = value 数组名array,下标index以及相应的值value。
awk -F ':' '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' /etc/passwd
#awk -v 的使用 :shell中的变量在awk程序中无法使用是一个新的进程去处理的,因此就需要-v 来向awk程序中传参数了,你比如在[shell程序]中有一个变量a=15,你在awk程序中直接使用变量a是不行的,而你用awk -v b=a, 这样在AWK程序中就可以使用变量b了!也就相当于使用a了!
#awk -v foo=hello -v bar=world 'BEGIN {print foo,bar}'
网友评论