Shell编程

Shell编程概述

1.1. Shell名词解释
Kernel:Linux内核主要是为了和硬件打交道
Shell
	命令解释器(command interpreter)
	Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
	Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
shell两大主流:
	sh:
		Bourne shell(sh) ,Solaris,hpux默认shell
		Bourne again shell(bash) ,Linux系统默认shell
	csh
		C shell(csh)
		tc shell(tcsh)
[root@basiscs ~]# vim test.sh
			#!/bin/bash
			ps -ef | grep java
			cat /root/passwd
[root@basiscs ~]# ll
[root@basiscs ~]# sh test.sh(执行test.sh脚本)
	test.sh: line 1: !/bin/bash/: No such file or directory
	root      22383  22380  0 11:31 pts/0    00:00:00 grep java
	root:x:0:0:root:/root:/bin/bash
	bin:x:1:1:bin:/bin:/sbin/nologin
	asdsds
	luckyisgood
	asdsds
	daemon:x:2:2:daemon:/sbin:/sbin/nologin
	...
[root@basiscs ~]# ./test.sh
	-bash: ./test.sh: Permission denied
[root@basiscs ~]# chmod 777 test.sh
[root@basiscs ~]# ./test.sh (即可运行)
[root@basiscs ~]# vim test.sh (只显示第一值)
		#!/bin/bash
		echo "$1"	
[root@basiscs ~]# sh test.sh 7777
	7777
[root@basiscs ~]# sh test.sh kskdaskd sdjsajdn
	kskdaskd

Shell名词解释

Shell脚本的执行

输入脚本的绝对路径或相对路径
	/root/helloworld.sh
	./helloworld.sh
执行的必须是一个可执行文件
	bash或sh +脚本
		#!/bin/bash
		echo "Hello World !"
		sh helloworld.sh
当脚本没有x权限时,root和文件所有者通过该方式可以正常执行
	在脚本的路径前再加". " 或source
	source helloworld.sh
区别
	第一种和第二种会新开一个bash,不同bash中的变量无法共享。
	第三种 是在同一个shell里面执行的
	export : 可以将当前进程的变量传递给子进程去使用(类似全局变量)
	将来配置profile的时候 所有的变量前必须加export
[root@basiscs ~]# name=wwwww
[root@basiscs ~]# vim t2.sh
		#!/bin/bash
		echo "$name"
[root@basiscs ~]# sh t2.sh
[root@basiscs ~]# echo "$name"
	wwwww
[root@basiscs ~]# chmod 777 t2.sh
[root@basiscs ~]# ./t2.sh
	没有任何输出
[root@basiscs ~]# source t2.sh
	wwwww	
[root@basiscs ~]# cat t2.sh
	#!/bin/bash
	echo "$name"
[root@basiscs ~]# echo "ping www.baidu.com" >> t2.sh
[root@basiscs ~]# sh t2.sh
[root@basiscs ~]# export id=111111
[root@basiscs ~]# echo "echo "$id"" >> t2.sh
[root@basiscs ~]# cat t2.sh
	#!/bin/bash
	echo "$name"
	echo 111111
[root@basiscs ~]# echo 'echo "$id"' >> t2.sh
[root@basiscs ~]# cat t2.sh
		#!/bin/bash
		echo "$name"
		echo 111111
		echo "$id"
[root@basiscs ~]# sh t2.sh

	111111
	111111

Shell基础入门

shell变量

Shell的字符串

Shell数组

Shell的注释

Shell参数传递

Shell高级进阶

Shell运算符

算数运算符

关系运算符

布尔运算符

文件测试运算符

echo打印数据

test 命令

Shell流程控制

if

case

for

while循环

break

continue

Shell函数

系统任务设置

系统启动流程、开机自启动服务

K:关机时需要关闭的服务
S:启动时需要开启的服务
[root@basiscs etc]# cd rc.d/
[root@basiscs rc.d]# ll
[root@basiscs rc.d]# vim /etc/rc.d/rc.sysinit
[root@basiscs rc.d]# vim rc.local
[root@basiscs rc.d]# vi /etc/rc3.d/
[root@basiscs rc.d]# cd rc3.d/
[root@basiscs rc3.d]# ll
	lrwxrwxrwx. 1 root root 20 Mar  2  2023 K50netconsole -> ../init.d/netconsole
	lrwxrwxrwx. 1 root root 17 Mar  2  2023 S10network -> ../init.d/network
	lrwxrwxrwx  1 root root 15 Nov 14 04:15 S95jexec -> ../init.d/jexec	
[root@basiscs rc3.d]# vim S10network 
[root@basiscs etc]# cd rc.d/
[root@basiscs rc.d]# ll
[root@basiscs rc.d]# vim /etc/rc.d/rc.sysinit
[root@basiscs rc.d]# vim rc.local
[root@basiscs rc.d]# vi /etc/rc3.d/
[root@basiscs rc.d]# cd rc3.d/
[root@basiscs rc3.d]# ll
[root@basiscs rc3.d]# chkconfig
[root@basiscs rc3.d]# mkdir -p /usr/local/scripts (首先创建脚本存放的文件夹)
[root@basiscs rc3.d]# cd /usr/local/scripts (进入文件夹)
[root@basiscs scripts]# vim hello.sh (在文件夹中创建脚本文件)
		#!/bin/bash
		
		echo "helloworld"
[root@basiscs scripts]# chmod 777 hello.sh (给予执行权限)
[root@basiscs scripts]# vim /etc/rc.d/rc.local (添加脚本的绝对路径)
		touch /usr/local/scripts/hello.sh
[root@basiscs scripts]# chmod 777 /etc/rc.d/rc.local (给予rc.local执行权限)
[root@basiscs scripts]# chkconfig
[root@basiscs scripts]# cd
[root@basiscs ~]# vim schoolntpdate.sh (创建开机自启动脚本文件)
		#!/bin/bash
		#chkconfig: 2345 88 99
		#description:auto_run
		# 开机自启动同步时间
		yum info ntp && ntpdate cn.ntp.org.cn
[root@basiscs ~]# chmod u+x schoolntpdate.sh (执行权限)
[root@basiscs ~]# cp schoolntpdate.sh /etc/init.d/ (将脚本拷贝到 /etc/init.d目录下)
[root@basiscs ~]# chkconfig --add /etc/init.d/schoolntpdate.sh (添加到服务)
[root@basiscs ~]# reboot
ctrl+r 快速模糊查找输入的命令
[root@basiscs ~]# chkconfig

系统服务

chkconfig命令查看当前虚拟机的服务

定时任务

systemctl status crond.service (查看定时任务状态)
crontab -e (编辑定时任务)
	08 16 * * * echo "qqqqqq" >> /root/log.txt (16点08分执行,将qqqqqq添加到log.txt,没有log.txt会自动创建)
date(查看时间)
	Fri Mar 17 16:07:58 CST 2023
crontab -l (查看当前定时任务内容)
	08 16 * * * echo "qqqqqq" >> /root/log.txt
[root@basiscs ~]# ll
	total 24
	-rw-r--r-- 1 root root   7 Mar 17 16:08 log.txt
	-rw-r--r-- 1 root root 945 Nov 14  2019 passwd
[root@basiscs ~]# mkdir logs (创建文件夹logs)
crontab -e (编辑定时任务)
cat /var/spool/mail/root(查看任务的历史)
crontab -r (清除任务)或者crontab -e (直接dd删除)
systemctl restart crond.service (重新启动定时任务,使之生效)
[root@basiscs ~]# crontab -l
	*/5 * * * * ntpdate cn.ntp.org.cn >> /root/logs/update.log
[root@basiscs ~]# vim upDD.sh (一定要使用绝对路径)
	#!/bin/bash
	echo "$(date "+%Y%m%d%H%M%S")" >> /root/logs/update.log
	/usr/sbin/ntupdate cn.ntp.org.cn >> /root/logs/update.log
[root@basiscs ~]# crontab -l
	*/1 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >> /root/logs/update.log
[root@basiscs ~]#  crontab -e
	*/1 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >> /root/logs/update.log
	*/1 * * * * sh /root/upDD.sh
[root@basiscs ~]# systemctl restart crond.service
[root@basiscs ~]# tail -F /root/update.log (实时显示结果)
星 星 星 星 星 command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */2表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
*:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59
分
-:表示区间,是一个范围,00 17-19 * * * cmd,就是每天17,18,19点的整点执行命令
,:是分割时段,30 3,19,21 * * * cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令
/n:表示分割,可以看成除法,*/5 * * * * cmd,每隔五分钟执行一次
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */2 * * * /usr/local/etc/rc.d/lighttpd restart
每两小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache
--(功能描述:显示年月日时分秒)
date "+%Y%m%d%H%M%S"

虚拟机初始化脚本

#!/bin/bash
## -bash: ./lucky.sh: /bin/bash^M: bad interpreter: No such file or directory
## vim或者vi的命令模式下,输入命令 set fileformat=unix 即可解决换行问题
echo -e "\e[1;31m【----------------------------------------在opt和var创建lucky文件夹】\e[0m"
sleep 5
mkdir -p /opt/lucky
mkdir -p /var/lucky
mkdir -p /usr/local/script
echo -e "\e[1;31m【----------------------------------------禁用防火墙】\e[0m"
sleep 5
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
echo -e "\e[1;32m【----------------------------------------修改selinux】\e[0m"
sleep 5
sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
echo -e "\e[1;32m【----------------------------------------安装wget】\e[0m"
sleep 5
yum install wget -y
echo -e "\e[1;33m【----------------------------------------修改yum源】\e[0m"
sleep 5
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos7.repo
yum clean all
yum makecache
echo -e "\e[1;33m【----------------------------------------安装常用软件】\e[0m"
yum install man man-pages ntp vim lrzsz zip unzip telnet perl net-tools -y
echo -e "\e[1;34m【----------------------------------------同步系统时间】\e[0m"
yum info ntp && ntpdate cn.ntp.org.cn
echo -e "\e[1;34m【----------------------------------------DNS域名配置】\e[0m"
sleep 5
echo "192.168.58.100 basenode" >> /etc/hosts
echo "192.168.58.161 bd1601" >> /etc/hosts
echo "192.168.58.162 bd1602" >> /etc/hosts
echo "192.168.58.163 bd1603" >> /etc/hosts
echo -e "\e[1;34m【----------------------------------------安装JDK】\e[0m"
sleep 5
rpm -ivh jdk-8u231-linux-x64.rpm
echo 'export JAVA_HOME=/usr/java/jdk1.8.0_231-amd64' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile
echo -e "\e[1;35m【----------------------------------------安装Tomcat】\e[0m"
sleep 5
tar -zxf apache-tomcat-8.5.47.tar.gz
mv apache-tomcat-8.5.47 /opt/lucky/
echo -e "\e[1;35m【----------------------------------------安装Mysql】\e[0m"
sleep 5
rpm -e --nodeps `rpm -qa | grep mariadb`
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
systemctl start mysqld
systemctl enable mysqld
temppasswd=`grep "A temporary password" /var/log/mysqld.log | awk '{ print
$NF}'`
mysql -uroot -p$temppasswd --connect-expired-password << EOF
set global validate_password_policy=low;
set global validate_password_length=6;
alter user root@localhost identified by '123456';
use mysql;
update user set host='%' where user = 'root';
commit;
quit
EOF
systemctl restart mysqld
echo -e "\e[1;35m【----------------------------------------安装Nginx】\e[0m"
sleep 5
echo -e "\e[1;36m【----------------------------------------设置开机启动项】\e[0m"
sleep 5
touch /usr/local/script/auto_ntpdate.sh
echo '#!/bin/bash' >> /usr/local/script/auto_ntpdate.sh
echo 'yum info ntp && ntpdate cn.ntp.org.cn' >>
/usr/local/script/auto_ntpdate.sh
chmod u+x /usr/local/script/auto_ntpdate.sh
echo '/usr/local/script/auto_ntpdate.sh' >> /etc/rc.local
chmod u+x /etc/rc.local
echo -e "\e[1;36m【----------------------------------------删除文件】\e[0m"
sleep 5
6. 虚拟机相互免秘钥
rm -rf apache-tomcat-8.5.47.tar.gz
rm -rf jdk-8u231-linux-x64.rpm
rm -rf mysql*
rm -rf *.sh
echo -e "\e[1;36m【----------------------------------------关闭计算器,拍快照】
\e[0m"
sleep 5
shutdown -h now

虚拟机相互免秘钥

##三台主机分别生成秘钥
【123】ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
##host验证
【123】vim /etc/ssh/ssh_config 在最后添加
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
##将秘钥分别拷贝给自己和别人
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@bd1701
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@bd1702
【123】ssh-copy-id -i ~/.ssh/id_rsa.pub root@bd1703
123456
##关闭主机拍摄快照
power off
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值