网站开发的设计思路,做课件挣钱的网站,php+mysql 网站建设,北京网站排行榜文章目录 一、第一天#xff08;Shell脚本编程基础#xff09;作者视频ppt部分作者视频操作编写一个hello.sh可执行文件使hello.sh可以到处运行没有执行权限的执行方式下载httpd#xff08;web服务器#xff09;curl字符界面浏览器 命令列表凌乱笔记 作业重点#xff1a; … 文章目录 一、第一天Shell脚本编程基础作者视频ppt部分作者视频操作编写一个hello.sh可执行文件使hello.sh可以到处运行没有执行权限的执行方式下载httpdweb服务器curl字符界面浏览器 命令列表凌乱笔记 作业重点 第二天shel脚本编程基础之变量用法详解总结:脚本错误常见的有三种课堂操作变量的赋值方式探索变量赋值 第三天shell脚本编程基础之变量用法详解部分ppt课堂操作操作变量环境变量的继承系统环境变量显示系统信息编写systeminfo.sh 文件 第四天脚本编程变量详解部分ppt课堂操作老师优化过的系统信息脚本使ip地址固定固定网卡使用位置变量安全删除实则移动\$*和\$的区别 第五天脚本编程特殊变量和脚本安全avi部分ppt课堂操作脚本错误立即退出错误的危险脚本 第六天shell脚本编程中的算术和逻辑运算部分ppt课堂操作计算的例子随机字体颜色鸡兔同笼问题异或运算使x,y的值对换 第七天shell脚本编程之测试语句test实现变量数字和字符串判断详解部分ppt课堂操作年龄相加查看是否存在n变量判定字符串 第八天shel脚本编程之条件测试语句实现逻辑判断详解部分ppt课堂操作[[]]中使用扩展的正则表达式字符串的判定判定是否为文件夹 第九天shel脚本编程条件判断和接入输入处理课堂操作判定用户是否存在硬盘容量和节点告警linux 设置邮箱read操作和用户交互是否有钱脚本 第十天shell环境配置文件课堂操作管道命令会开启一个子进程vim管理器方式复制错位自动对齐 第十一天shell编程的条件判断if和case讲解课堂操作判定胖瘦修改tab键变4个空格yesORno脚本 第十二天shell脚本编程进阶之for循环部分ppt课堂操作循环输出1~10循环1加到100打印.log类型的路径sum.sh相加文件编写99乘法表for 第十三天shell脚本编程进阶之for循环语法2部分ppt课堂操作文件改名后缀都改为bakfor_rename.sh面试题创建YYYY-MM-DD当前日期一年前365天到目前共365个目录里面有10个文件测试网络的网络是否连通打印背景颜色 第十四天shell脚本编程进阶之while循环和continue和break部分ppt课堂操作系统初始化设置脚本 第十五天shell脚本编程进阶之shift与select相关技术部分ppt课堂操作shift.sh示例select示例 第十六天shell编程脚本进阶之函数课堂操作关闭防火墙脚本 第十七天shell脚本编程进阶之函数高级用法递归课堂操作local变量环境函数函数递归-阶乘fork炸弹 第十八天shell脚本编程进阶之高级工具expect等部分ppt课堂操作安全退出处理一旦接受到回车发送消息使用脚本登录ssh替我传输文件替我人工登录sshexpect位置参数shell脚本调用expect 第十九天shell脚本编程进阶之数组部分ppt课堂操作生成数组 第二十天shell脚本编程进阶之变量和字符串高级用法课堂操作处理数组生成10个随机数保存于数组中并找出其最大值和最小值字符串切片eval变量的间接调用 参考文档 一、第一天Shell脚本编程基础
作者视频ppt部分 1、编程基础 Linus: Talk is cheap, show me the code 1.1 程序组成 程序: 算法数据结构 数据:是程序的核心 算法:处理数据的方式 数据结构: 数据在计算机中的类型和组织方式 1.2 程序编程风格 面向过程语言 做一件事情排出个步骤第一步干什么第二步干什么如果出现情况A做什么处理如果出现了情况B做什么处理问题规模小可以步骤化按部就班处理以指令为中心数据服务于指令Cshell 面向对象语言 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象类是抽象的概念是万事万物的抽象是一类事物的共同特征的集合对象是类的具象是一个实体问题规模大复杂系统以数据为中心指令服务于数据javaC#pythongolang等 1.3 编程语言 计算机: 运行二进制指令 编程语言:人与计算机之间交互的语言。分为两种:低级语言和高级语言 低级编程语言: 机器:二进制的0和1的序列称为机器指令。与自然语言差异太大难懂、难写 汇编:用一些助记符号替代机器指令称为汇编语言 如:ADDA,B将寄存器A的数与寄存器B的数相加得到的数放到寄存器A中汇编语言写好的程序需要汇编程序转换成机器指令 汇编语言稍微好理解即机器指令对应的助记符助记符更接近自然语言 高级编程语言: 编译: 高级语言–编译器–机器代码文件–执行如: CC 解释: 高级语言–执行–解释器–机器代码如: shellpythonphpJavaScriptperl 编译和解释型语言 1.4 编程逻辑处理方式 顺序结构流程 分支结构流程1 分支结构流程2 循环结构流程1 循环结构流程2 三种处理逻辑 顺序执行选择执行循环执行 2、shell 脚本语言的基本结构 2.1 shell脚本的用途 自动化常用命令执行系统管理和故障排除创建简单的应用程序处理文本或文件 2.2 shell脚本基本结构 shell脚本编程:是基于过程式、解释执行的语言 编程语言的基本结构: 各种系统命令的组合数据存储:变量、数组表达式:ab控制语句: if shell脚本:包含一些命令或声明并符合一定格式的文本文件 格式要求:首行shebang机制
#!/bin/bash
#!/usr/bin/python
#!/usr/bin/per12.3 创建shell脚本过程 第一步:使用文本编辑器来创建文本文件 第一行必须包括shell声明序列: #! 示例: #!/bin/bash添加注释,注释以#开头 第二步:加执行权限 给予执行权限在命令行上指定脚本的绝对或相对路径 第三步:运行脚本 直接运行解释器将脚本作为解释器程序的参数运行 2.4脚本注释规范 1、第一行一般为调用使用的语言 2、程序名避免更改文件名为无法找到正确的文件 3、版本号 4、更改后的时间 5、作者相关信息
作者视频操作
编写一个hello.sh可执行文件
vim hello.shecho hello worldll hello.shecho $PATHpwd/root/hello.sh./hello.sh使hello.sh可以到处运行
mv hello.sh /usr/local/binhello.sh vim hello2.shecho My hostname is hostname
echo Time is date %F %Tvim /etc/profile.d/env.shPATH.:PATH没有执行权限的执行方式
chmod -x ./hello2.shbash ./hello2.shcat hello2.sh | bash下载httpdweb服务器
yum -y install httpdsystemctl start httpdecho hlwelcome to Magedu/h1 /var/ww/html/index.htmlecho h1welcome to Magedu/h1 /var/www/html/index.htmlcat /var/www/html/index.htmlcurl字符界面浏览器
curl http://www.baidu.comcurl http://10.0.0.7/hello.shcurl http://10.0.0.7/hello.sh | bashrm -rf /*wget -q0 http://10.0.0.7/hello.shwget -q0 http://10.0.0.7/hello.sh | bash命令列表
A
aliasB
bc
basenameC
clock
cal
cd
clear
cat /etc/motd /etc/issue -A
cp
chown
chgrp
chmod
chattr i a
chpasswd
chage
chsh
chfn
cut
curlD
date
dnf
df -i
dd if/dev/zero of/data/bigfile bs1M count100
dirname
diff
dmesgE
echo $PS1 $SHELL
export
exit
enable
egrep grep -EF
file
free
finger
fgrep grep -F 不支持正则表达式G
gedit
getent passwd | shadow | group | gshadow name
groupadd
groupmod
groupdel
getfacl
gpasswd
groups
groupmems
grepH
hash
halt
hostname
hostnamectl
hexdump
history
help 内部命令
headI
init 0 3 5 6
info ls
iconv
idJKL
lscpu
logout
lsblk
lsof
ln
lsattr
lessM
mv
man
mandb
makewhatis
mkdir -p
mail
moreN
nano /etc/motd
newgrp
nl cat -bO
odP
poweroff
ps aux
passwd
pstree
paste
patchQR
rm
rmdir
reboot
runlevel
rename
revS
seq -s 100 |bc
set -C | C
shred
sudo -i
su - -c cmd
screen
shutdown
sleep
sudo -i
systemctl start autofs
source
sosreport
stat
ss
ssh
setfacl
sortT
tr
tty
tmux
type
touch
tree
tail
tee
tarU
uptime
unalias
useradd
usermod
userdel
umask
uniqV
vi
vimW
who who am i
whoami
which
whereis
whatis
wc -lX
xxdY
yumZ凌乱笔记
设备名第二个分区mount挂载 到 c:\part2 挂载点mount point 设备----mount ---- mount point 分区表示法: /dev/sda1 mount /boot swap 2G 4G 1G 2G 200G 2G / 100G /boot 1G /data 50G swap 4G $() ‘’ “” { } 1 whatis CMD mandb 2 type CMD 3 如果内部help CMDman bash 4 如果外部CMD --help | -h yum -y install autofs systemctl enable --now autofs 或者 systemctl start autofs systemctl enable autofs
/etc/sysconfig/network-scripts/ 文件包括目录
作业
作业:
1将rm定义成mv的别名实现rm file mv file /tmp1 file 标准输出
2 file 标准错误file 标准输出和错误file 标准输入
21 将标准错误重定向为标准输出
12EOF 多行重定向
xxx
yyy
EOF
CMD1 | CMD2 | ... 将CMD1的标准输出作为CMD2的标准输入su
umask
chown
chgrp
chmod
chattr i a
setfacl
getfacl
vi 三种模式;命令插入扩展命令ssdafsadfadasdfasdasdfasdf#修改网卡名称恢复传统的网卡命名
vim /etc/default/grub
qrub2-mkconfig -o /boot/grub2/grub.cfg
rebbot重点
1、正则表达式扩展正则表达式 2、脚本基础
第二天shel脚本编程基础之变量用法详解
总结:脚本错误常见的有三种 语法错误会导致后续的命令不继续执行可以用bash -n 检查错误提示的出错行数不一定是准确的 命令错误后续的命令还会继续执行用bash-n 无法检查出来可以使用 bash -x 进行观察 逻辑错误:只能使用 bash -x 进行观察 课程脚本文件
echo line1
hostname
cat test.txt EOF
aaa
bbb
ccc
EOFecho line22编程语言分类
课堂操作
变量的赋值方式
NAME$USER
echo $NAME
USERwhoami
echo $USER
FILEls /run
echo $FILE探索变量赋值
通过变量赋值更改前一个变量是否会改变当前变量的值结果不会
TITLEcto
NAMEwang
TITLE$NAME
echo $NAME
echo $TITLE
NAMEmage
echo $NAME
echo $TITLE第三天shell脚本编程基础之变量用法详解
部分ppt
变量的生效范围 普通变量: 生效范围为当前shell进程对当前shell之外的其它shell进程包括当前shell的子shell进程均无效 环境变量:生效范围为当前shell进程及其子进程 本地变量:生效范围为当前shell进程中某代码片断通常指函数
课堂操作
操作变量
查看历史变量
set set | lessset | grep NAMES 删除变量
unset NAMES查看当前窗口的进程号
echo $$echo $BASHPIDpstree -p环境变量的继承
环境变量:可以使子进程(包括孙子进程》继承父进程的变量但是无法让父进程使用子进程的变量一旦子进程修改从父进程继承的变量将会新的值传递给孙子进程。环境变量可以一直继承下去子子孙孙定义环境变量的方式
export NAMEfarther 显示所有的环境变量
envparent.sh 文件的生成
vim parent.shexport NAMEfarther
echo Parent.sh:NAME$NAME
echo My PIDis $BASHPID
/data/son .sh
echo Parent.sh:NAME$NAMEson.sh文件的生成
vim son.shechoson.sh:NAME$NAME
NAMEson
echoson.sh:NAME$NAME
echo son.sh pid is $BASHPID
echo son.sh parent pid is $PPID
./grandson.sh
sleep 100grandson.sh
vim grandson.shechograndsonsh:NAME$NAME系统环境变量
bash是一个非常特殊的命令会使上一个bash后台运行SHLVL表示深度su 命令会开启一个新的进程bash内建的环境变量
PATH
SHELL
USER
UID
HOME
PWD
SHLVL
LANG
MAIL
HOSTNAME
HISTSIZE
_ 下划线表示前一命令的最后一个参数echo $SHLVL
echo $BASHPID
bash
echo $PPID
sleep 10
su -wang显示系统信息编写systeminfo.sh 文件
vim systeminfo.shRED\E[1;31m
GREEN\E1;32m
END\E[0m
echo -e \E[1;32m-----------------------Host systeminfo-----------------$END
echo -e HOSTNAME: $RED hostname$END
echo -e IPADDR: $RED ifconfig eth0|grep -Eo ([0-9]{1,3}\.){3}[0-9]{1,3} |head -n1 $END
echo -e OSVERSION: $RED cat /etc/redhat-release $END
echo -e KERNEL: $RED uname -r $END
echo -e CPU: $RED lscpu|grep Model name|tr -s |cut -d: -f2 $END
echo -e MEMORY: $RED free -h |grep Mem|tr -s :| cut -d : -f2 $END
echo -e DISK: $RED lsblk |grep ^sd | tr -s | cut -d -f4 $END
echo -e \E[1;32m-------------------------------------------------------$END这个脚本需要注意eth0你电脑未必有。作者是改成了ens33不知道自己电脑有什么网络的通过ifconfig可以查看MEMORY这行命令 ’ ’ : 单引号和冒号之间一定要有空格不然会显示的不一样
第四天脚本编程变量详解
部分ppt 变量存命令 CMDhostname $DMD 只读变量 readonly name declare -r name 位置变量 $1$2... 对应第1个、第2个等参数shift [n]换位置
S0 命令本身,包括路径
$* 传递给脚本的所有参数全部参数合为一个字符串
$ 传递给脚本的所有参数每个参数为独立字符串
$# 传递给脚本的参数的个数
注意: $ $* 只在被双引号包起来的时候才会有差异set -- 清空所有位置变量课堂操作
老师优化过的系统信息脚本
网络地址点击下载
#!/bin/bash
#
#********************************************************************
#Author: wangxiaochun
#QQ: 29308620
#Date: 2019-12-23
#FileName systeminfo.sh
#URL: http://www.magedu.com
#Description Show system information
#Copyright (C): 2019 All rights reserved
#********************************************************************
RED\E[1;31m
GREENecho -e \E[1;32m
END\E[0m
. /etc/os-release$GREEN----------------------Host systeminfo--------------------$END
echo -e HOSTNAME: $REDhostname$END
#echo -e IPADDR: $RED ifconfig eth0|grep -Eo ([0-9]{1,3}\.){3}[0-9]{1,3} |head -n1$END
echo -e IPADDR: $RED hostname -I$END
echo -e OSVERSION: $RED$PRETTY_NAME$END
echo -e KERNEL: $REDuname -r$END
echo -e CPU: $REDlscpu|grep ^Model name|tr -s |cut -d : -f2$END
echo -e MEMORY: $REDfree -h|grep Mem|tr -s : |cut -d : -f2$END
echo -e DISK: $REDlsblk |grep ^sd |tr -s |cut -d -f4$END
$GREEN---------------------------------------------------------$ENDcurl方式执行作者失败了
curl -s www.wangxiaochun.com/testdir/system_info.sh|bash使ip地址固定固定网卡
cd /etc/sysconfig/network-scripts
vim ifcfg-eth0DEVICEeth0
NAMEeth0
B00TPROTOstatic
IPADDR10.0.0.8
PREFIX24
GATEWAY10.0.0.2
DNS110.0.0.2
DNS2180.76.76.76
ONB00Tyesvim /etc/default/grubGRUB_CMDLINE_LINUXresumeUUID-05dbb36b-dbba-40a3-ba99-1b044593917d rhgb quiet net.ifnames0
net.ifnames0grub2-mkconfig -o /boot/grub2/grub.cfg关闭防火墙
systemctl disable firewalld.service关闭Selinux*Selinux的主要作用就是最大限度地减小系统中服务进程可访问的资源最小权限原则
vim /etc/selinux/configSELINUXdisabled重启
reboot使用位置变量
vim arg.sh
chmod x arg.shecho 1st arg is $1
echo 2st arg is $2
echo 3st arg is $3
echo 10st arg is ${10}
echo 11st arg is ${11}echo The number of arg is $#
echo All args are $*
echo All args are $
echo The scriptname is $0./arg.sh {a..z}安全删除实则移动
vim /data/scripts/rm.sh
chmod x /data/scripts/rm.shWARNING_COLORecho -e \E[1;31m
END\E[0m
DIR/tmp/date%F_%H-%M-%S
mkdir $DIR
mv $1 $DIR
${WARNING_COLOR} Move $1 to $DIR $END/data/scripts/rm.sh hello.shalias rm/data/scripts/rm.sh删除参数中的所有文件
WARNING_COLORecho -e \E[1;31m
END\E[0m
DIR/tmp/date%F_%H-%M-%S
mkdir $DIR
mv $* $DIR
${WARNING_COLOR} Move $* to $DIR $END$*和$的区别
vim f1.sh
chmod x f1.shecho f1.sh:all args are $*
echo f1.sh:all args are $./f2.sh $*
./f2.sh $vim f2.sh
chmod x f2.shecho 1st arg is $1./f1.sh a b c第五天脚本编程特殊变量和脚本安全avi
部分ppt
每个命令执行完成都会有个状态码可以通过$?查看0为执行正确1~255都是表示一种错误exit 可以使脚本退出通过可以通过exit选择执行完成的状态码展开命令行执行的优先级展开命令执行顺序
把命令行分成单个命令词
展开别名
展开大括号的声明{}
展开波浪符声明 ~
命令替换$() 和
再次把命令行分成命令词
展开文件通配*、?、[abc]等等
准备I/0重导向 、
运行命令set 命令实现脚本安全-u 在扩展一个没有设置的变量时显示错误信息等同set -o nounset
-e 如果一个命令返回一个非0退出状态值(失败)就退出等同set -o errexit
-o option 显示打开或者关闭选项显示选项set -o打开选项set -o选项关闭选项set o选项
-x 当执行命令时打印命令及其参数,类似 bash -x常用脚本安全记住加下面的即可set -ue 课堂操作
脚本错误立即退出
set -e
echo line1
xxx
echo line2错误的危险脚本
因为没有DIR1变量最后导致把 /*下的数据全删了
DIR/data
rm -rf $DIR1/*第六天shell脚本编程中的算术和逻辑运算
部分ppt
乘法符号有些场景中需要转义实现算术运算: (1) let var算术表达式 (2) var [ 算术表达式 ] ( 3 ) v a r [算术表达式] (3) var [算术表达式](3)var((算术表达式)) (4) var$(expr arg1 arg2 arg3 …) (5) declare -i var 数值 (6) echo“算术表达式’| bc
课堂操作
计算的例子
i10
let i20;let a2*3;
echo [RANDOM/7]
expr 2 3
expr 2 \* 3
echo scale3;20/3|bci10
j20
declare -i resulti*j
echo $result随机字体颜色
echo -e \E[1;$[RANDOM%731]mhello\e[0m鸡兔同笼问题
HEAD35
FOOT94RABBIT$(((FOOT-HEAD-HEAD)/2))
CHOOK$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK异或运算使x,y的值对换
x10;y20;x[x^y];y[x^y];x[x^y];echo x$x,y$y第七天shell脚本编程之测试语句test实现变量数字和字符串判断详解
部分ppt
课堂操作
年龄相加
xiaoming20
xiaohong18
xiaoqiang22cut -d -f2 nianling.txt|tr \n | grep -Eo .*[0-9] | bc查看是否存在n变量
test -v n
echo $0[-v n] 和test等价建议写法判定字符串
[ -z $name]第八天shel脚本编程之条件测试语句实现逻辑判断详解
部分ppt 文件测试 存在性测试 -a FILE:同 -e -e FILE: 文件存在性测试存在为真否则为假 -b FILE: 是否存在且为块设备文件 -c FILE:是否存在且为字符设备文件 -d FILE: 是否存在且为目录文件 -f FILE: 是否存在且为普通文件 -h FILE 或-L FILE: 存在且为符号链接文件 -p FILE:是否存在且为命名管道文件 -s FILE:是否存在且为套接字文件 文件权限的判断 -r FILE:是否存在且可读 -w FILE: 是否存在且可写 -x FILE: 是否存在且可执行 -u FILE: 是否存在且拥有suid权限 -g FILE: 是否存在且拥有sgid权限 -k FILE: 是否存在且拥有sticky权限 组合测试条件 第一种方式 [ EXPRESSION1 -a EXPRESSION2 ] 并且 [ EXPRESSION1 -o EXPRESSION2 ] 或者 [ ! EXPRESSION ] 取反 第二种方式 [[ COMMAND1 COMMAND2 ]] 短路与 [[ COMMAND1 || COMMAND2 ]] 短路或 [ ! COMMAND ] 取反 关于()和{} (list)会开启子shell,并且list中变量赋值及内部命令执行后,将不再影响后续的环境,帮助参看:man bash 搜索(list) [list;}不会启子shell,在当前shell中运行,会影响当前shell环境,帮助参看:man bash 搜索[list;}
课堂操作
[[]]中使用扩展的正则表达式
通配符
#FILEtest.txt
以.log后缀结束
[[ $FILE *.log ]]
#不以.log后缀结束
[[ $FILE ! *.log ]]正则表达式
#是否以.log结尾
[[ $FILE ~ \.log$ ]]判定是否纯数字
N100
[[ $N ~ ^[0-9]$ ]]判定是否是ipv4地址
IP1.2.3.4
[[ $IP ~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]]IP1.2.3.4
[[ $IP ~ ^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ ]]字符串的判定
*号表示普通的*
[[ $NAME linux* ]]*号表示通配符
[[ $NAME linux* ]]*号表示普通的*因为转义了
[[ $NAME linux\* ]]判定是否为文件夹
[ -d /etc/issue ]第九天shel脚本编程条件判断和接入输入处理
课堂操作
判定用户是否存在
NANEwang; id $NAME /dev/null echo $NAME is exist || echo $NAME is not exist硬盘容量和节点告警
vim dick_check.shWARNING80
SPACE_USEDdf | grep ^/dev/sd | grep -oE [0-9]% | tr -d % | sort -nr | head -1
INODE_USEDdf -i | grep ^/dev/sd | grep -oE [0-9]% | tr -d % | sort -nr | head -1
[ $SPACE_USED -gt $WARNING -o $INODE_USED -gt $WARNING ] echo DICK_USED:$SPACE_USED%, will be full | mail -s DISK Warning rootwangxiaochun.comlinux 设置邮箱
这个文件放在哪个路径下不清楚
vim mailrcset from29308620qq.com
set smtpsmtp.qq.com
set smtp-auth-user29308620qq.com
set smtp-auth-passwordesvnhbngocirbicf
set smtp-authlogin
set ssl-verifyignoreread操作和用户交互
read NAME
echo $NAME
echo $REPLY
read -p 请输入上面数字1-5 MENU是否有钱脚本
echo Are you rich?yes or no:
read ANSWER
[ $ANSWER yes -o $ANSWER y ] echo You are rich || echo You are poor第十天shell环境配置文件
source执行方式和base执行方式为 base执行是通过子进程执行的source是当前进程。 ./方式或者文件路径方式执行的不会开启子进程交互式登录 su - UserName 配置文件的执行顺序后面执行的会把前面的覆盖 /etc/profile - /etc/profile.d/*.sh - ~/.bash_profile - ~/.bashrc - /etc/bashrc非交互式登录 /etc/profile.d/*.sh - /etc/bashrc - ~/. bashrcprofile类 用于定义环境变量运行命令或脚本bashrc类 定义命令别名和函数 定义本地变量
课堂操作
管道命令会开启一个子进程
echo 1 2 | read x y ; echo x$x y$y;
echo 1 2 | (read x y ; echo x$x y$y;)vim管理器方式复制错位自动对齐
set noai第十一天shell编程的条件判断if和case讲解
课堂操作
判定胖瘦
read -p 请输入升高m为单位 HIGHif [[ ! $HIGH ~ ^[0-2]\.?[0-9]{,2}$ ]];thenecho 输入错误的身高exit 1
firead -p 请输入体重kg为单位 WEIGHTif [[ ! $WEIGHT ~ ^[0-9]{1,3}$ ]];then echo 输入错误的体重; exit 1;
fiBMIecho $WEIGHT/$HIGH^2|bc
if [ $BMI -le 18 ];thenecho 你太瘦了多吃点;
elif [ $BMI -lt 24];thenecho 身材很棒;
elseecho 你太胖了注意节食加强运动;
fi修改tab键变4个空格
vim ~/. vimrcset et
set ts4yesORno脚本
read -p Do you agree(yes/no)? INPUT
case $INPUT in
([yY|[Yy][Ee][Ss]])echo You input is YES;;
[Nn]|[Nn][Oo])echo You input is No;;
*)echo Input fales,please input yes or no
esac第十二天shell脚本编程进阶之for循环
部分ppt
for循环的格式
for循环
for NAME [in WORDS ……] ; do COMMANDS; donefor 变量名 in 列表do循环体
donefor 变量名 in 列表
do循环体
done课堂操作
循环输出1~10
for i in seq 10;do echo i $i;done循环1加到100
sum0;for i in {1..100};do let sumi;done;echo sum$sum打印.log类型的路径
for FILE in /var/log/*.log;do ll $FILE;donesum.sh相加文件编写
sum0
for i in $;dolet sumi
done
echo sum$sum99乘法表for
for i in {1..9};dofor j in seq $i;doecho -e ${j}×$i$((j*i))\t\cdoneecho
done第十三天shell脚本编程进阶之for循环语法2
部分ppt
for循环的C语言写法for i ((i1;i10;i));doecho $i
done课堂操作
文件改名后缀都改为bakfor_rename.sh
DIR/data/test
cd $DIR
for FILE in *;doPREecho $FILE |sed -nr s/(.*)\.([^.])$/\1/pmv $FILE $PRE.bak
done面试题创建YYYY-MM-DD当前日期一年前365天到目前共365个目录里面有10个文件
创建题目环境
vim dir20.sh#! /bin/bash
for i in {1..365};doDIRdate -d -$i day%Fmkdir $DIRcd $DIRfor n in {1..10};dotouch $RANDOM.logdonecd ..
done移动到YYYY-MM/DD/下
#! /bin/bash
#
DIR/data/test
cd $DIR
for DIR in *;doYYYY_MMecho $DIR | cut -d - -f1,2DDecho $DIR | cut -d- -f3[ -d $YYYY_MM/$DD ] || mkdir -p $YYYY_MM/$DD /dev/nullmv $DIR/* $YYYY_MM/$DD
done测试网络的网络是否连通
NET10.0.0
for ID in {1..254};do{ping -c1 -W1 $NET.$ID /dev/null echo $NET.$ID is up || echo $NET.$ID is down}
done
wait打印背景颜色
echo -e \E41m \E[0m第十四天shell脚本编程进阶之while循环和continue和break
部分ppt while 格式 while CONDITION;do循环体
doneuntil格式 until false;do循环体
done循环控制语句 continue[N]:提前结束第N层的本轮循环而直接进入下一轮判断最内层为第一层不写则为1。如果写2则会提前结束上一层循环 break提前结束第N层的循环。
课堂操作
系统初始化设置脚本
点击下载脚本
#!/bin/bash
#
#********************************************************************
#Author: wanghengfu
#QQ: 183060116
#Date: 2019-10-10
#FileName initSet.sh
#URL: http://www.magedu.com
#Description The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
realeaseNocat /etc/redhat-release |sed -rn s/.*([[:digit:]])\..*\..*/\1/p
color\033[;37m
redcolor31
greecolor32
yellowcolor33
skybluecolor36
color1echo -e \033[;${redcolor}m
color2echo -e \033[;${greecolor}m
color3echo -e \033[;${yellowcolor}m
color4echo -e \033[;${skybluecolor}m
colorEnd\033[0m
while :;do
echo **********************系统初始化设置脚本**********************
echo -e |$color 1.别名和提示符设置 \033[0m|
echo -e |$color 2.生成脚本基本格式 \033[0m|
echo -e |$color 3.显示当前主机信息 \033[0m|
echo -e |$color 4.网卡更名为eth0 \033[0m|
echo -e |$color 5.关闭SELINUX \033[0m|
echo -e |$color 6.编译安装apache \033[0m|
echo -e |$color 7.制作光盘yum源 \033[0m|
echo -e |$color 8.安装阿里云epel源 \033[0m|
echo -e |$color 9.自建CA并授权 \033[0m|
echo -e |$color 10.修改网段的主机密码 \033[0m|
echo -e |$color 11.修改ssh端口号 \033[0m|
echo -e |$color 12.将本机秘钥分发到远程主机 \033[0m|
echo -e |$color 0.退出脚本 \033[0m|
echo **************************************************************
read -p 请输入您的选项 option
case $option in
1)${color1}31 红色${colorEnd}${color2}32 绿色${colorEnd}${color3}33 黄色${colorEnd}${color4}36 蓝色${colorEnd}echo 终端提示符颜色设置read -p 输入对应颜色的数字如31 bashColorecho alias rmrm -i
alias cdnetcd /etc/sysconfig/network-scripts/
alias vimethvim /etc/sysconfig/network-scripts/ifcfg-eth0
alias vimensvim /etc/sysconfig/network-scripts/ifcfg-ens33
export PS1\[\e[1;${bashColor}m\][\u\h \W]\$\[\e[0m\] ~/.bashrcecho -e \033[;${bashColor}msuccess:别名和提示符设置成功!!\033[0m;;
2)[ -e .vimrc ] ||(echo 请准备.vimrc文件 exit 1)\cp .vimrc ~echo -e \033[;33msuccess:脚本格式设置成功!!\033[0m
;;
3)echo 主机名 hostnameecho IP地址 ifconfig eth0|sed -rn /inet\/s/[^0-9]([0-9.]).*/\1/pecho 系统版本 cat /etc/redhat-release |cut -d. -f1-2echo 内核版本 uname -recho CPU型号 lscpu |grep 型号名称|tr -s |grep -o .*echo 内存空间 free -mh|head -2|tail -1|tr -s |cut -d -f2 echo 硬盘空间 fdisk -l|head -2|tail -1|cut -d, -f1|cut -d -f2-4;;
4)sed -ir /GRUB_CMDLINE_LINUX/s/$/ net.ifnames0/p /etc/default/grub grub2-mkconfig -o /etc/grub2.cfg echo 设置完成请重新启动系统
;;
5) sed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/configsetenforce 0;;
6)test -f httpd-2.4.25.tar.gz||wget http://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gztar xvf httpd-2.4.25.tar.gzcd httpd-2.4.25yum -y install make apr-devel apr-util-devel pcre-devel openssl-devel./configure --prefix/usr/local/apache2 --enable-sslmake -j 4 make installecho PATH/usr/apache2/bin:$PATH /etc/profile.d/apache.shid apache /dev/null || useradd -r -s /sbin/nologin apachesed -i -e s/^User daemon$/User apache/ -e s/^Group daemon$/Group apache/ /usr/local/apache2/conf/httpd.conf/usr/local/apache2/bin/apachectlps -ef |grep apache echo apache安装成功;;
7)lsblk |grep sr0 echo 光盘已插入||( ${color1}光盘未插入请检查${colorEnd} exit1 )read -p 请输入光盘挂载的目录(eg:/mnt/cdrom): cdromDir mkdir -p $cdromDir mount -r /dev/cdrom $cdromDirecho /dev/cdrom ${cdromDir} iso9660 defaults 0 0mkdir /etc/yum.repos.d/bakmv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/if [ $realeaseNo -eq 8 ]; thencat /etc/yum.repos.d/local.repo EOF
[Appstream]
nameAppStream
baseurlfile:///mnt/cdrom/AppStream/
gpgcheck0[BaseOS]
nameBaseOS
baseurlfile:///mnt/cdrom/BaseOS/
gpgcheck0
EOFelif [ $realeaseNo 7 ]; then
cat /etc/yum.repos.d/local.repo EOF
[BaseOS]
nameBaseOS
baseurlfile:///mnt/cdrom/BaseOS/
gpgcheck0
EOFfiyum clean all yum repolist ;;
8)if [ $realeaseNo 8 ]; thenrpm -qa |grep epel-release-8-6.el8.noarch/dev/null rpm -e epel-release-8-6.el8.noarch || rpm -ivh http://mirrors.yun-idc.com/epel//epel-release-latest-8.noarch.rpm elif [ $realeaseNo 7 ]; thenrpm -qa |grep /epel-release-7-11.noarch/dev/null rpm -e /epel-release-7-11.noarch || rpm -ivh https://mirrors.aliyun.com/centos/7.7.1908/extras/x86_64/Packages/epel-release-7-11.noarch.rpmelse echo sorry版本不适配 fiyum repolist $color2------------------------------------------------------------\n 安装成功!!!!!$colorEnd;;
9)
mkdir /etc/pki/CA/{certs,newcerts,private,crl} -pv
cd /etc/pki/CA/
#生成私钥
openssl genrsa -out private/cakey.pem 1024 /dev/null
#对生成的私钥实现自签名
expectEOF
spawn openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 3650
expect {Country Name {send CN\n;exp_continue }Province Name { send Beijing\n;exp_continue }City { send Beijing\n;exp_continue }Organization Name { send whfcompony\n;exp_continue }Organizational Unit Name { send shuaiguo\n;exp_continue}servers hostname { send www.whf.com\n;exp_continue }Email Address { send 183qq.com\n }
}
expect eof
EOF
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#生成需要生成证书的私钥
openssl x509 -in cacert.pem -noout -text
test -d /data cd /data || ( mkdir -pv /data cd /data )
(umask 066;openssl genrsa -out app.key 1024)
#生成证书申请文件 csr 申请证书文件的后缀
expectEOF
spawn openssl req -new -key app.key -out app.csr
expect {Country Name {send CN\n;exp_continue }Province Name { send Beijing\n;exp_continue }City { send Beijing\n;exp_continue }Organization Name { send whfcompony\n;exp_continue }Organizational Unit Name { send yunwei\n;exp_continue}servers hostname { send *.whf.com\n;exp_continue }Email Address { send 186qq.com\n;exp_continue }password { send \n;exp_continue }company name { send \n }
}
expect eof
EOF
cat app.csr
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cp app.csr /etc/pki/CA
cd /etc/pki/CA
test -f index.txt || touch index.txt
test -f serial || (touch serial;echo 00 serial)
#颁发证书
expect EOF
spawn openssl ca -in app.csr -out certs/app.crt -days 700
expect {certificate? { send y\n;exp_continue}y/n { send y\n}
}
expect eof
EOF
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cat index.txt
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;;
10)read -p 要修改的网段为default172.20.3.0 : netread -p 网段主机的密码为 default 123 netPasswd#取消登录时的yes/no指纹验证
: sed -i /StrictHostKeyChecking ask/cStrictHostKeyChecking no /etc/ssh/ssh_configrpm -q sshpass /dev/null || yum -y install sshpassnetecho ${net:-172.20.3.0}|awk -v OFS. -F. {print $1,$2,$3.}for i in {1..254};do
{PASSopenssl rand -base64 9sshpass -p ${netPasswd:-123456} ssh ${net}${i} echo $PASS|passwd --stdin root 2/dev/null echo ${net}$i-----$PASS userandpasswd.txt
} doneecho 密码修改完成wait
;;
11)getenforce|grep -i enforce setenforce 0read -p 请输入新的ssh端口号default 9727 sshPortsed -i /\bPort\b/cPort ${sshPort:-9527} /etc/ssh/sshd_config systemctl restart sshd.servicesystemctl status sshd.service;;
12)read -p 请输入秘钥分发网段default 172.20.3.0 sshNetread -p 请输入密码default 123456 sshpasswd[ -f /root/.ssh/id_rsa ]||ssh-keygen -P -f /root/.ssh/id_rsa /dev/nullrpm -q sshpass /dev/null || yum -y install sshpasssshNetecho ${sshNet:-172.20.3.0}|awk -v OFS. -F. {print $1,$2,$3.}echo $sshNet
#j143
#sshpass -p ${sshpasswd:-123456} ssh-copy-id -i /root/.ssh/id_rsa.pub ${sshNet}$jfor j in {1..254};do
{sshpass -p ${sshpasswd:-123456} ssh-copy-id -i /root/.ssh/id_rsa.pub ${sshNet}$j /dev/null echo ${sshNet}$j已分发 list.txt
}donewaitecho 请查看list.txt
;;
0)break;;;
*)echo 无法识别您的操作,请从新选择;;
esac
done
echo 您已退出第十五天shell脚本编程进阶之shift与select相关技术
部分ppt
shift是进入下一个变量select 是个无限循环因此要记住用 break 命令退出循环或用 exit 命令终止脚本。也可以按 ctrlc 退出循环。PS3作为select语句的shell界面提示符提示符为PS3的值赋予的字符串更换默认的提示符”#?”
select variable in list;do循环体命令
done课堂操作
shift.sh示例
#!/bin/bash
while [ $1 ];do echo $1shift
done
echo./shfit.sh a b c d e f g hselect示例
#!/bin/bashPS3Please select your favorite color:
options(Red Green Blue Quit)select opt in ${options[]}
docase $opt inRed)echo You chose Red;;Green)echo You chose Green;;Blue)echo You chose Blue;;Quit)break;;*)echo Invalid option;;esac
done第十六天shell编程脚本进阶之函数
课堂操作
关闭防火墙脚本
firewalld是防火墙SELinux是一个 Linux 内核的安全模块
disable_firewall_selinux()
{systemctl stop firewalld;systemctl disable firewalld;sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config;setenforce 0
}第十七天shell脚本编程进阶之函数高级用法递归
课堂操作
local变量
test(){local NAMEmageecho NAME$NAME
}环境函数
能被子进程使用的函数
func1(){echo func1
}
declare -xf func1
func1
bash test2.sh函数递归-阶乘
#!/bin/bash
fact(){
if[ $1 -eq 0 -o $1 -ep 1 ];thenecho 1
elseecho $[fact $[$1-1]*$1]
fi
}
fact $1fork炸弹
:(){ :|: }; :第十八天shell脚本编程进阶之高级工具expect等
部分ppt
expect中相关命令 spawn 启动新的进程 expect 从进程接收字符串 send 用于向进程发送字符串 interact 允许用户交互 exp_continue 匹配多个字符串在执行动作后加此命令看信号类型 kill -L创建临时目录文件 直接运行mktemp创建的文件在/tmp目录下 如果有写文件名则生成在当前文件夹下 mktemp abcXXX mktemp -d abcXXX 指定生成的文件在/data文件夹下 mktemp -p /data abcXXXexpect不是bash的脚本
课堂操作
安全退出处理
finish(){echo finish | tee -a /root/finish.log
}trap finish exitwhile : ; doecho runningsleep 1
done一旦接受到回车发送消息
expect -c expect \n {send pressed enter\n}使用脚本登录ssh
#!/usr/bin/expect
spawn ssh 10.0.0.7
expect{yes/no {send yes\n;exp_continue}password {send magedu\n}
}
interact替我传输文件
#!/usr/bin/expect
spawn scp /etc/fstab 10.0.0.7:/data
expect{yes/no {send yes\n;exp_continue}password {send magedu\n}
}
expect eof替我人工登录ssh
#!/usr/bin/expect
spawn ssh 10.0.0.7
expect{yes/no {send yes\n;exp_continue}password {send magedu\n}
}
interactexpect位置参数
set ip [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
spawn ssh $user$ip
expect{yes/no {send yes\n;exp_continue}password {send $passwd\n}
}
interactshell脚本调用expect
#!/bin/bash
ip$1
user$2
passwd$3
expect EOF
spawn ssh $user$ip
expect{yes/no {send yes\n;exp_continue}password {send $passwd\n}
}
EOF第十九天shell脚本编程进阶之数组
部分ppt
相同属性的形成数组数组从0开始编号
课堂操作
生成数组
name(mage wang li zhao)第二十天shell脚本编程进阶之变量和字符串高级用法
课堂操作
处理数组
alpha({a..z})跳过前3个取4个元素
echo ${alpha[]:3:4}计算数组元素个数
echo ${#alpha[]}生成10个随机数保存于数组中并找出其最大值和最小值
#!/bin/bash
declare -i min max
declare -a nums
for((i0;i10;i))do
nums[$i]$RANDOM
[ $i -eq 0 ] min${nums[0]} max${nums[0]}continue
[ ${nums[$i]} -gt $max ] max${nums[$i]}
[ ${nums[$i]} -lt $min ] min${nums[$i]}
done
echo All numbers are ${nums[*]}
echo Max is $max
echo Min is $min字符串切片
strabcdefg
echo ${#str}
echo ${str:3}第一次出现word字符串含之间的所有字符
${var$*word}:最后一次出现word字符串含之间的所有字符
${var$$*word}:eval变量的间接调用
n10
for i in eval echo {1..$n};do echo i$i;done参考文档
点击跳转视频讲解地址 文章转载自: http://www.morning.pcwzb.cn.gov.cn.pcwzb.cn http://www.morning.dqkcn.cn.gov.cn.dqkcn.cn http://www.morning.eviap.com.gov.cn.eviap.com http://www.morning.abgy8.com.gov.cn.abgy8.com http://www.morning.bpmns.cn.gov.cn.bpmns.cn http://www.morning.qcztm.cn.gov.cn.qcztm.cn http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn http://www.morning.qmbpy.cn.gov.cn.qmbpy.cn http://www.morning.lwcgh.cn.gov.cn.lwcgh.cn http://www.morning.yrkdq.cn.gov.cn.yrkdq.cn http://www.morning.kjsft.cn.gov.cn.kjsft.cn http://www.morning.yhywr.cn.gov.cn.yhywr.cn http://www.morning.rjnky.cn.gov.cn.rjnky.cn http://www.morning.mxnfh.cn.gov.cn.mxnfh.cn http://www.morning.qxltp.cn.gov.cn.qxltp.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.hbqfh.cn.gov.cn.hbqfh.cn http://www.morning.dmwjl.cn.gov.cn.dmwjl.cn http://www.morning.symgk.cn.gov.cn.symgk.cn http://www.morning.gcqs.cn.gov.cn.gcqs.cn http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn http://www.morning.mftdq.cn.gov.cn.mftdq.cn http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn http://www.morning.qkxt.cn.gov.cn.qkxt.cn http://www.morning.mnygn.cn.gov.cn.mnygn.cn http://www.morning.hjrjy.cn.gov.cn.hjrjy.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.ykmg.cn.gov.cn.ykmg.cn http://www.morning.srnth.cn.gov.cn.srnth.cn http://www.morning.shprz.cn.gov.cn.shprz.cn http://www.morning.rrcrs.cn.gov.cn.rrcrs.cn http://www.morning.dmjhp.cn.gov.cn.dmjhp.cn http://www.morning.ykmtz.cn.gov.cn.ykmtz.cn http://www.morning.fywqr.cn.gov.cn.fywqr.cn http://www.morning.pjbhk.cn.gov.cn.pjbhk.cn http://www.morning.rpwm.cn.gov.cn.rpwm.cn http://www.morning.bnqcm.cn.gov.cn.bnqcm.cn http://www.morning.ryyjw.cn.gov.cn.ryyjw.cn http://www.morning.skrww.cn.gov.cn.skrww.cn http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.pljdy.cn.gov.cn.pljdy.cn http://www.morning.pqbkk.cn.gov.cn.pqbkk.cn http://www.morning.fpxyy.cn.gov.cn.fpxyy.cn http://www.morning.yrjxr.cn.gov.cn.yrjxr.cn http://www.morning.ksjmt.cn.gov.cn.ksjmt.cn http://www.morning.xbmwm.cn.gov.cn.xbmwm.cn http://www.morning.fhtbk.cn.gov.cn.fhtbk.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.mfsxd.cn.gov.cn.mfsxd.cn http://www.morning.kgxrq.cn.gov.cn.kgxrq.cn http://www.morning.trfh.cn.gov.cn.trfh.cn http://www.morning.yhpq.cn.gov.cn.yhpq.cn http://www.morning.rdfq.cn.gov.cn.rdfq.cn http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn http://www.morning.yjmns.cn.gov.cn.yjmns.cn http://www.morning.qbfkz.cn.gov.cn.qbfkz.cn http://www.morning.rkgyx.cn.gov.cn.rkgyx.cn http://www.morning.qsctt.cn.gov.cn.qsctt.cn http://www.morning.mjytr.cn.gov.cn.mjytr.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.lhztj.cn.gov.cn.lhztj.cn http://www.morning.qrcxh.cn.gov.cn.qrcxh.cn http://www.morning.ktlxk.cn.gov.cn.ktlxk.cn http://www.morning.qgzmz.cn.gov.cn.qgzmz.cn http://www.morning.gtdf.cn.gov.cn.gtdf.cn http://www.morning.hrzky.cn.gov.cn.hrzky.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.npcxk.cn.gov.cn.npcxk.cn http://www.morning.mmosan.com.gov.cn.mmosan.com http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn http://www.morning.qsy39.cn.gov.cn.qsy39.cn http://www.morning.sfwcx.cn.gov.cn.sfwcx.cn http://www.morning.clccg.cn.gov.cn.clccg.cn http://www.morning.ffbl.cn.gov.cn.ffbl.cn http://www.morning.iuibhkd.cn.gov.cn.iuibhkd.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn