Shell脚本

目录

主要功能

Shell的使用方式

Shell脚本设计

Shell的变量

Shell的数值运算

Shell 是一种命令行解释器,为用户与操作系统内核之间的交互提供接口。它允许用户通过输入命令来执行各种操作,如文件管理、程序运行和系统配置等。

主要功能

  1. 命令执行:用户输入命令,Shell 解释并执行。

  2. 脚本编写:支持编写脚本,自动化任务。

  3. 环境配置:管理环境变量和系统设置。

  4. 输入输出重定向:支持将命令的输入输出重定向到文件或其他命令

Shell的使用方式

[root@sv7 ~]# cat /etc/shells       #查看所有解释器
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@svr7 ~]# sh         #切换成sh解释器
sh-4.2# ls            #利用sh解释器输入命令
sh-4.2#exit           #退出sh解释器

[root@sv7 ~]# yum -y install ksh    #若没有ksh解释器则安装
[root@sv7 ~]# cat /etc/shells       #查看结果
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/ksh
/bin/rksh
/usr/bin/ksh
/usr/bin/rksh

若需要临时使用另一种Shell环境,可以直接执行对应的Shell解释器程序,比如只要执行ksh可以切换到ksh命令行环境

[root@sv7 ~]# ksh         #进入新解释器
# pwd 
/root
# ls /
bin   dev  home  lib64  mnt  proc  run   srv  tmp  var
boot  etc  lib   media  opt  root  sbin  sys  usr
# exit
[root@sv7 ~]# useradd -s /bin/ksh tom       #指定用户登录的解释器
[root@sv7 ~]# grep tom /etc/passwd
tom:x:1000:1000::/home/tom:/bin/ksh

bash可实现:Tab键、快捷键、历史命令、支持别名、管道、重定向
shell脚本:提前写好可执行的语句,可以完成特定任务的文件按顺序、批量化执行

验证重定向
> 重定向标准输出
2> 重定向错误输出
&> 重定向所有输出
#标准输出到文件

[root@sv7 ~]# touch a.txt
[root@sv7 ~]# ls a.txt 
a.txt
[root@sv7 ~]# ls a.txt  > log       
[root@sv7 ~]# cat log 
a.txt

#错误输出到文件

[root@sv7 ~]# ls xx
ls: cannot access 'xx': No such file or directory
[root@sv7 ~]# ls xx 2> log1     
[root@sv7 ~]# cat log1 
ls: cannot access 'xx': No such file or directory

#所有输出(标准输出和错误输出)到文件

[root@sv7 ~]# ls a.txt xx
ls: cannot access 'xx': No such file or directory
a.txt
[root@sv7 ~]# ls a.txt xx &> log2
[root@sv7 ~]# cat log2 
ls: cannot access 'xx': No such file or directory
a.txt
[root@sv7 ~]# rm -rf a.txt log*

Shell脚本设计

一个规范的Shell脚本构成包括:
        1、声明(需要的解释器)
        2、可执行语句(操作代码)

一:编写第一个Shell脚本,输出“Hello World”
1)根据手动任务操作编写脚本文件

[root@sv7 ~]# vim first.sh 
#!/bin/bash
echo 'Hello World' 
[root@sv7 ~]# chmod +x first.sh          #添加可执行权限

2)执行脚本的方式,测试效果
方式一:作为‘命令字’:指定脚本文件的路径,前提是有 x 权限

[root@sv7 ~]# /root/first.sh    #绝对路径执行
Hello World
[root@sv7 ~]# ./first.sh       #相对路径执行
Hello World

方式二,作为“参数”:使用bash、sh、source、. 来加载脚本文件

[root@sv7 ~]# chmod -x first.sh
[root@sv7 ~]# bash first.sh           #使用bash程序执行,开启子进程
[root@sv7 ~]# source first.sh          #不开启子进程
[root@sv7 ~]# . first.sh             #不开启子进程


这三种都是先启动一个程序,使用程序执行脚本,目前这个脚本没有执行权限,有执行权限的是程序

二:编写为本机快速配Yum仓库的Shell脚本
1)根据参考文件的内容,编写脚本内容如下:

[root@sv7 ~]# vim myyum.sh
#!/bin/bash
echo "[xx]
name=xx
baseurl=xxx
gpgcheck=0" > /etc/yum.repos.d/xx.repo 
[root@sv7 ~]# chmod +x myyum.sh             #添加可执行权限
[root@sv7 ~]# ./myyum.sh                    #执行配置Yum仓库的脚本

检查配置结果

[root@sv7 ~]# ls /etc/yum.repos.d/          #已有xx.repo文件
删除xx.repo文件
[root@sv7 ~]# rm -rf /etc/yum.repos.d/xx.repo

三:编写快速装配ftp服务的Shell脚本
脚本文件如下:
&> 重定向所有输出

[root@sv7 ~]# vim ftp.sh
#!/bin/bash
yum -y install vsftpd &> /dev/null       #将不需要的信息扔黑洞
systemctl start vsftpd
systemctl enable vsftpd
[root@sv7 ~]# chmod +x ftp.sh           #添加可执行权限
[root@sv7 ~]# ./ftp.sh 
[root@sv7 ~]# systemctl status vsftpd   #确认脚本执行结果,按q退出

Shell的变量

一:自定义变量
1)新建/赋值变量
[root@sv7 ~]# x=10    #等号两边不能有空格,变量名称可以用数字、字母、下划线,不能以数字开头,不能用特殊符号

2)查看变量(调用变量),通过echo $变量名 可输出变量值:

[root@sv7 ~]# echo $x
10

变量名称可以用数字、字母、下划线,不能以数字开头,不能用特殊符号

[root@sv7 ~]# a=1
[root@sv7 ~]# echo $a
1
[root@sv7 ~]# a1=2
[root@sv7 ~]# echo $a1
2
[root@sv7 ~]# a?1=2
-bash: a?1=2: command not found
[root@sv7 ~]# 1a=2
-bash: 1a=2: command not found

查看变量时,若变量名称与后面要输出的字符串连在一起,则应该以{}将变量名括起来以便区分:

[root@sv7 ~]# echo $xRMB       #无法识别变量名x
[root@sv7 ~]# echo ${x}RMB      #使用{}可以防止与后续字符混淆
10RMB

3)撤销自定义变量,若要撤销已有的变量,可将变量赋值为空或使用unset命令:

[root@sv7 ~]# unset x        #撤销变量x
[root@sv7 ~]# echo $x        #查看时已无结果

二:使用环境变量
1)使用环境变量,当前用户的环境变量USER记录了用户名、HOME记录了家目录、SHELL记录了登录解释器、HOSTNAME记录主机名、UID是用户的id号:

[root@sv7 ~]# echo $USER $HOME $SHELL $UID
root /root /bin/bash 0
[root@sv7 ~]# echo $HOSTNAME
sv7

可以把变量放入/etc/profile,对所有用户有效;放入~/.bash_profile,仅对指定的用户有效
使用env可查看所有环境变量,使用set可查看所有变量

三:使用位置变量与预定义变量
1)创建一个测试脚本,用来展示。

[root@sv7 ~]# vim test.sh
#!/bin/bash
echo $0                   #脚本的名称
echo $1                   #第一个参数
echo $2                   #第二个参数
echo $*                   #所有参数
echo $#                   #所有参数的个数(参数有几个)
echo $$                   #执行脚本的进程号(或者说当前进程的进程号)
[root@sv7 ~]# chmod +x test.sh      #添加可执行权限

2)执行脚本test.sh

[root@sv7 ~]# ./test.sh a b c

$?可以不用在脚本中测试,直接命令行测试
[root@sv7 ~]# ls xxx
[root@sv7 ~]# echo $?              #上一命令的返回状态码,0为成功,非0为异常
[root@sv7 ~]# ls /

四:创建账户与修改密码的脚本,编写一个创建账户alice,密码123456的脚本
1)编写并执行脚本

[root@sv7 ~]# vim user.sh
#!/bin/bash
useradd $1
echo "$2" |passwd --stdin $1 
[root@sv7 ~]# chmod +x user.sh 
[root@sv7 ~]# ./user.sh alice 123456
Changing password for user alice.
passwd: all authentication tokens updated successfully.

Shell的数值运算

步骤一:整数运算工具
1)使用$(())或$[]表达式,引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出

[root@sv7 ~]# echo $[3+2]
5
[root@sv7 ~]# echo $[3*2]
6
[root@sv7 ~]# echo $[3-2]
1
[root@sv7 ~]# echo $[10/2]
5
[root@sv7 ~]# echo $[10%3]
1

[root@sv7 ~]# echo $((3+2))
5

2)变量的自增/减操作
使用let命令
let命令可以直接对变量值做运算再保存新的值。
简写表达式       完整表达式
i++             i=i+1       #变量i加1
i--             i=i-1       #变量i减1
i+=2            i=i+2       #变量i加2
i-=2            i=i-2       #变量i减2
i*=2            i=i*2       #变量i乘以2
i/=2            i=i/2       #变量i除以2
i%=2            i=i%2       #变量i除以2取余数

[root@sv7 ~]# i=10
[root@sv7 ~]# let i++
[root@sv7 ~]# echo $i
11
[root@sv7 ~]# let i+=2
13
[root@sv7 ~]# echo $i

步骤二:小数运算工具
1)bc交互式运算,先执行bc命令进入交互环境,然后再输入需要计算的表达式

[root@sv7 ~]# yum -y install bc 
[root@sv7 ~]# bc        #交互式运算
1.1+1.8     #小数计算
2.9
3.2+4.5     #小数计算,quit退出
7.7

2)bc非交互式运算
将需要运算的表达式通过管道操作交给bc运算。注意,小数位的长度可采用scale=N限制。

[root@sv7 ~]# echo "1.1+1" | bc
[root@sv7 ~]# echo "10/3" | bc
[root@sv7 ~]# echo "scale=2;10/3" | bc   #scale可以定义结果是小数点后多少位

3)bc做判断

[root@sv7 ~]# echo "3>2" | bc   #判断3大于2吗,是
[root@sv7 ~]# echo "3>8" | bc   #判断3大于8吗,否

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值