Linux初识shell脚本

2 篇文章 0 订阅


风吹柳叶遮黄雀,薄翅不觉已落蝉。

什么是shell

在Linux内核与用户之间的解释器程序
通常指 /bin/bash
负责向内核翻译及传达用户/程序指令
相当于操作系统的“外壳”

shell使用方式

交互式 —— 命令行
人工干预、智能化程度高
逐条解释执行、效率低
非交互式 —— 脚本
需要提前设计、智能化难度大
批量执行、效率高
方便在后台静悄悄地运行

[root@zifeiyu ~]# cat /etc/shells 	# 查看所有解释器
[root@zifeiyu ~]# sh 	# 切换成sh解释器
sh-4.2# ls 	# 利用sh解释器输入命令
sh-4.2#exit 	# 退出sh解释器
[root@zifeiyu ~]# yum -y install ksh 	# 安装新解释器
[root@zifeiyu ~]# ksh 	# 进入新解释器

bash优点

tab键、快捷键、历史命令、支持别名、管道、重定向

shell脚本

提前写好可执行的语句,可以完成特定任务的文件
按顺序、批量化执行

shell脚本编写规范

  • 声明解释器
    #!/bin/bash
  • 编写注释
    #可以描述脚本功能、变量作用等信息
  • 执行指令
    ls
    cd
    。。。
    。。。

脚本的执行方式

  • 为脚本添加x权限,使用相对或者绝对路径执行
    chmod u+x file1.sh
    ./file1.sh 或者 /opt/file1.sh
    用户(root)—bash—bash—echo
  • 使用解释器程序执行脚本,无需x权限
    bash file1.sh
    用户(root)—bash —bash—echo 会开启新的子进程
  • 使用source命令执行脚本,无需x权限
    source file1.sh
    用户(root)—bash—echo 不会开启新的子进程
>  重定向标准输出
2> 重定向错误输出
&>  重定向所有输出

编写脚本,搭建yum

#!/bin/bash
#搭建yum软件仓库
mkdir /abc
mount /dev/cdrom /abc
rm -rf /etc/yum.repos.d/*.repo
echo "[abc]
name=abcabc
baseurl=file:///abc
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo

编写脚本,安装网站服务并开启,浏览网站时显示"web-test~~"

#!/bin/bash
# 搭建网站
yum -y install httpd
echo "web-test~~" > /var/www/html/index.html
systemctl restart httpd

编写脚本,安装ftp服务并开启且设置为开机自启

#!/bin/bash
yum -y install vsftpd &> /dev/null 	# 将不需要的信息扔黑洞
systemctl restart vsftpd
systemctl enable vsftpd

变量

变量 	使用固定的名称存放可能发生变化的值,可以提高脚本的灵活度、适应力
常量 	固定不变的内容

变量的种类

自定义变量
自定义变量名称可以用数字、字母、下划线,但不能以数字开头,不能使用特殊符号,等号两边也不能有空格

变量名称=值
   a=10 	# 创建变量(对变量赋值),名字是a,值是10
   a=30 	# 再次赋值,之前的会被覆盖
   echo $a 	# 调用变量时使用$符号
   unset  a 	# 取消变量的定义
   a= 	# 将变量a赋值为空,效果同上
   echo ${a}RMB 	# 变量名容易与后续字符发生混淆时使用大括号隔开

环境变量
由系统提前定义好,使用时直接调用

USER 当前用户名 	UID当前用户的id号 	HOME当前用户家目录
HOSTNAME 主机名 	SHELL当前用户的解释器 	PWD当前位置
PATH 存储命令的路径 	PS1 一级提示符 	PS2 二级提示符

位置变量与预定义变量

$1  执行脚本时后面第1个位置参数
$2  执行脚本时后面第2个位置参数
$3  执行脚本时后面第3个位置参数
$*  执行脚本时后面所有位置参数
$#  执行脚本时后面位置参数的个数
$$  随机进程号
$?  判断上一条指令是否执行成功,0是成功,非0是失败

编写脚本,创建用户tom,配置密码123456

#!/bin/bash
useradd tom
echo "123456" | passwd --stdin tom

改良版
#!/bin/bash
useradd $1
echo "$2" | passwd --stdin $1
env  查看所有环境变量
set   查看所有变量

变量的扩展知识

引号和反撇号

" " 双引号  界定范围
a=10
echo "$a" 	//正常调用变量
' '  单引号  界定范围  屏蔽特殊符号的功能
echo '$a' 	//无法调用变量,$被屏蔽
` `  反撇号  获取命令的执行结果,还可以使用$( )实现相同效果
a=date 	//仅仅将四个字母赋值给a
a=`date` 	//将date执行结果赋值给a
a=$(date) 	//效果同上

使用read指令

#!/bin/bash
read -p "请输入用户名"  u 	//-p是可以定义提示信息,u相当于自
定义变量名称,可以存储用户看到提示信息后输入的字符
useradd $u
read -p "请输入密码"  n
echo "$n" | passwd --stdin $u

stty  -echo 屏蔽回显
stty  echo 恢复回显

再次改良脚本:
#!/bin/bash
read  -p  "请输入用户名"  u
useradd  $u
stty  -echo
read  -p  "请输入密码"  n
stty  echo
echo  "$n" | passwd  --stdin  $u

使用export发布全局变量

局部变量 仅仅在当前解释器进程中使用的变量
全局变量 解释器产生的子进程中也可以使用的变量
a=10   //创建变量
export  a   //将已有变量发布为全局效果
export  b=20   //创建变量的同时发布为全局效果
export  -n  b   //将全局变量恢复为局部变量
注意,测试时要在父进程创建变量,然后可以执行bash进入
子进程测试效果,如果要返回父进程要执行exit指令

运算

加、减、乘、除、求模(取余数)

使用expr命令,可以运算并输出结果

expr  1  +  1     //加法,运算符号两边要有空格
expr  2 – 1     //减法
expr  2  '*'  2  //乘法,单引号可以屏蔽特殊符号*的功能,本身是通配符,而不是乘号,屏蔽之后就可以识别为乘号
expr  2  \*  2   // \是转义符号,可以屏蔽身后一个特殊符号的功能
expr  4  /  2   //除法
expr  5  %  2   //取余数
a=10
b=20
expr $a + $b
expr $a + 100
expr $a + $a

$[ ] 运算

使用$(( )) 可以实现相同效果

echo $[2*2]
echo $[2-2]
echo $[2/2]
echo $[2%2]
a=10
b=20
expr $a + $b
echo $[a+b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值