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 ~]
ps -ef | grep java
cat /root/passwd
[root@basiscs ~]
[root@basiscs ~]
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 ~]
-bash: ./test.sh: Permission denied
[root@basiscs ~]
[root@basiscs ~]
[root@basiscs ~]
echo "$1"
[root@basiscs ~]
7777
[root@basiscs ~]
kskdaskd
Shell名词解释
Shell脚本的执行
输入脚本的绝对路径或相对路径
/root/helloworld.sh
./helloworld.sh
执行的必须是一个可执行文件
bash或sh +脚本
echo "Hello World !"
sh helloworld.sh
当脚本没有x权限时,root和文件所有者通过该方式可以正常执行
在脚本的路径前再加". " 或source
source helloworld.sh
区别
第一种和第二种会新开一个bash,不同bash中的变量无法共享。
第三种 是在同一个shell里面执行的
export : 可以将当前进程的变量传递给子进程去使用(类似全局变量)
将来配置profile的时候 所有的变量前必须加export
[root@basiscs ~]
[root@basiscs ~]
echo "$name"
[root@basiscs ~]
[root@basiscs ~]
wwwww
[root@basiscs ~]
[root@basiscs ~]
没有任何输出
[root@basiscs ~]
wwwww
[root@basiscs ~]
echo "$name"
[root@basiscs ~]
[root@basiscs ~]
[root@basiscs ~]
[root@basiscs ~]
[root@basiscs ~]
echo "$name"
echo 111111
[root@basiscs ~]
[root@basiscs ~]
echo "$name"
echo 111111
echo "$id"
[root@basiscs ~]
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]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc3.d]
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]
[root@basiscs etc]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc.d]
[root@basiscs rc3.d]
[root@basiscs rc3.d]
[root@basiscs rc3.d]
[root@basiscs rc3.d]
[root@basiscs scripts]
echo "helloworld"
[root@basiscs scripts]
[root@basiscs scripts]
touch /usr/local/scripts/hello.sh
[root@basiscs scripts]
[root@basiscs scripts]
[root@basiscs scripts]
[root@basiscs ~]
yum info ntp && ntpdate cn.ntp.org.cn
[root@basiscs ~]
[root@basiscs ~]
[root@basiscs ~]
[root@basiscs ~]
ctrl+r 快速模糊查找输入的命令
[root@basiscs ~]
系统服务
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 ~]
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 ~]
crontab -e (编辑定时任务)
cat /var/spool/mail/root(查看任务的历史)
crontab -r (清除任务)或者crontab -e (直接dd删除)
systemctl restart crond.service (重新启动定时任务,使之生效)
[root@basiscs ~]
*/5 * * * * ntpdate cn.ntp.org.cn >> /root/logs/update.log
[root@basiscs ~]
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 ~]
*/1 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >> /root/logs/update.log
[root@basiscs ~]
*/1 * * * * /usr/sbin/ntpdate cn.ntp.org.cn >> /root/logs/update.log
*/1 * * * * sh /root/upDD.sh
[root@basiscs ~]
[root@basiscs ~]
星 星 星 星 星 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"
虚拟机初始化脚本
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
【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