shell 01
================================================
一,shell基本介绍
1,什么是shell
在Linux内核与用户之间的解释器程序
通常指 /bin/bash
负责向内核翻译及传达用户/程序指令
相当于操作系统的“外壳”
[root@svr7 ~]# cat /etc/shells //查看所有解释器
[root@svr7 ~]# sh //切换成sh解释器
sh-4.2# ls //利用sh解释器输入命令
sh-4.2#exit //退出sh解释器
[root@svr7 ~]#yum -y install ksh //安装新解释器
[root@svr7 ~]#ksh //进入新解释器
bash优点:tab键、历史命令、快捷键、别名、重定向、管道
2,什么是shell脚本
提前写好可执行的语句,能够完成特定任务的文件
按顺序、批量化处理
二,脚本编写
shell脚本的编写规范
-
声明解释器
#!/bin/bash
-
编写注释
#编写脚本功能、作者信息、变量作用等内容
-
执行指令
脚本的执行方式:
-
添加x权限,使用绝对或者相对路径执行
chmod u+x test01.sh
/opt/test01.sh
用户(root)---bash---bash--- echo abc
-
使用解释器执行脚本,无需x权限,会开启新bash进程
bash test01.sh
用户(root)---bash---bash--- echo abc
-
使用source命令执行脚本,无需x权限,不会开启新bash进程
source test01.sh
用户(root)---bash--- echo abc
编写脚本,配置yum仓库
#!/bin/bash
#部署yum仓库
mount /dev/cdrom /mydvd
rm -rf /etc/yum.repos.d/*.repo
echo "[abc]
name=xxx
baseurl=file:///mydvd
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo
编写脚本,安装httpd服务,需要开机自启并且主页显示内
容为”web-test~~~”
vim /opt/test04.sh
#!/bin/bash
yum -y install httpd //装包
echo "web-test~~~" > /var/www/html/index.html //定义主页内容
systemctl restart httpd //开服务
systemctl enable httpd //设置开机自启
之后使用bash test04.sh 执行脚本
curl 192.168.4.7 可以看到页面内容
编写脚本,开启ftp服务,并实现开机自启
yum -y install vsftpd &> /dev/null //安装ftp,不显示任何信息,dev下
的null相当于黑洞,不需要的信息都可以扔到里面让其消失。
systemctl restart vsftpd
systemctl enable vsftpd
> 正确信息重定向
2> 错误信息重定向
&> 所有信息重定向
------------------------------------------------
三,变量
常量 固定不变
变量 使用固定的名称存放可能会发生变化的内容(值),可以提高脚本
的灵活度、提高适应力
变量的种类
-
自定义变量,名称可以用数字、字母、下划线,不能以数字开头,不能
使用特殊符号。
变量名称=变量的值
a=10 //创建变量
echo $a //调用变量
unset a //取消变量
echo ${a}RMB //使用大括号可以避免混淆
-
环境变量,由系统提前定义好,使用时直接调用
USER 当前用户名 HOME 当前用户的家目录 UID 当前用户的id号
SHELL 当前用户的解释器 HOSTNAME 主机名 PWD 当前位置
PATH 存储命令路径
3,位置变量与预定义变量
$1 执行脚本时后面跟的第1个位置参数
$2 执行脚本时后面跟的第2个位置参数
$3 执行脚本时后面跟的第3个位置参数
$* 执行脚本时后面跟的所有位置参数
$# 执行脚本时后面跟的所有位置参数的个数
$$ 随机的进程号
$? 判断上一条指令是否成功,0是成功,非0是失败
编写脚本,创建用户abcd,配置密码123456
#!/bin/bash
useradd abcd
echo "123456" | passwd --stdin abcd
改良版
#!/bin/bash
useradd $1 //使用位置变量$1,在执行脚本时灵活定义用户名
echo "$2" | passwd --stdin $1 //使用位置变量$2定义密码
bash test07.sh xyz 123 //执行脚本时,脚本名字后面跟的第一个
位置参数是xyz,在脚本中作为要创建的用户名,第二个位置参数
是123,在脚本中作为配置的密码
-----------------------------------------------
env //可以显示所有环境变量
env | grep HOSTNAME //可以配合grep搜索
set //显示所有变量
abcd=8888
set | grep abcd //可以配合grep搜索
-----------------------------------------------
四,变量的扩展知识
-
引号与反撇号
" " 双引号 界定范围
' ' 单引号 界定范围 屏蔽特殊符号功能
`` 反撇号 可以获取命令的执行结果,或者使用$( )可以实现
相同效果
-
使用read指令,以交互式使用脚本
#!/bin/bash
read -p "请输入用户名称:" n //使用变量n存储用户敲的名字
useradd $n
read -p "请输入密码:" m //使用变量m存储用户敲的密码
echo "$m" | passwd --stdin $n
----------------------------------------
stty -echo 屏蔽回显
stty echo 恢复回显
-----------------------------------------
再次改良脚本:
#!/bin/bash
read -p "请输入用户名称:" n
useradd $n
stty -echo
read -p "请输入密码:" m
echo
stty echo
echo "$m" | passwd --stdin $n
-
使用export发布全局变量