Shell概述、编写及执行脚本、Shell变量+数值运算

一、shell基本介绍 

1.1 什么是shell

◆  在Linux内核与用户之间的解释器程序

◆ 通常指 /bin/bash

◆ 负责向内核翻译及传达用户/程序指令

◆ 相当于操作系统的“外壳”

1.2 shell使用方式

◆ 交互式   —— 命令行

-----人工干预、智能化程度高

-----逐条解释执行、效率低

◆ 非交互式 —— 脚本

-----需要提前设计、智能化难度大

-----批量执行、效率高

-----方便在后台静悄悄地运行

[root@test1 ~]# cat /etc/shells   #查看所有解释器
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash

[root@test1 ~]# sh    #切换成sh解释器
sh-4.2#

sh-4.2# ls               #利用sh解释器输入命令
\  anaconda-ks.cfg  named.conf    test1.txt

sh-4.2#exit         #退出sh解释器

1.3 bash命令和shell脚本优点

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

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

二、shell脚本的编写

2.1 创建shell脚本文件并命名

[root@test1 ~]# vim   /test01.sh

2.2 shell脚本编写规范 

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

yum   -y  install  httpd

。。。。。。

2.3 脚本的执行

1)方式一:

[root@test1 ~]# chmod u+x /test01.sh  #为脚本添加x权限,使用相对或者绝对路径执行

[root@test1 ~]# cd /

[root@test1 ~]# ./test01.sh   #执行脚本

2)方式二:

[root@test1 ~]# bash /test01.sh    #使用解释器程序执行脚本,无需x权限

用户(root)---bash ---bash---echo   会开启子进程

3)方式三:

[root@test1 ~]# source /test01.sh   #使用source命令执行脚本,无需x权限

用户(root)---bash---echo  不会开启子进程

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

[root@test1 ~]# vim /http.sh

#!/bin/bash

#搭建网站

yum -y install httpd

echo "web-test~~" > /var/www/html/index.html

systemctl restart httpd

[root@test1 ~]# chmod u+x /http.sh

[root@test1 ~]# cd /

[root@test1 ~]#  ./http.sh

 2.4 重定向符号说明

符号

说明

>

重定向标准输出

2>

重定向错误输出

&>

重定向所有输出

三、shell变量

3.1 变量和常量

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

常量-------固定不变的内容。

3.2 变量的种类

3.2.1 自定义变量

● 名称可以用数字、字母、下划线,不能以数字开头,不能使用特殊符号,等号两边不能有空格。

变量名称=值

变量使用

说明

a=10

创建变量(对变量赋值),名字是a,值是10

a=30

再次赋值,之前的会被覆盖

 echo $a

调用变量时使用$符号

unset  a

取消变量的定义

a= 

将变量a赋值为空,效果取消变量定义

echo ${a}RMB

变量名容易与后续字符发生混淆时使用大括号隔开

3.2.2 环境变量

● 由系统提前定义好,使用时直接调用

变量

说明

USER

当前用户名

UID

当前用户的id号

HOME

当前用户家目录

HOSTNAME

主机名

SHELL

当前用户的解释器

PWD

当前位置

PATH 

存储命令的路径

PS1

一级提示符

 PS2

二级提示符

env

看所有环境变量

set 

查看所有变量

 3.2.3 位置变量与预定义变量

变量

说明

$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

四、变量的扩展知识

4.1 引号和反撇号

变量及符号

说明

" "

双引号,界定范围

echo "$a"

正常调用变量a

' '

单引号,界定范围,屏蔽特殊符号的功能

echo '$a'

无法调用变量a,$被屏蔽

` `

反撇号,获取命令的执行结果,还可以使用$( )实现相同效果

a=`date`

将date执行结果赋值给a

a=$(date)

将date执行结果赋值给a

4.2 使用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

4.3 使用export发布全局变量

● 局部变量------仅仅在当前解释器进程中使用的变量

● 全局变量------解释器产生的子进程中也可以使用的变量

a=10     #创建变量

export  a    #将已有变量发布为全局效果

export  b=20    #创建变量的同时发布为全局效果

export  -n  b   #将全局变量恢复为局部变量

注意:测试时要在父进程创建变量,然后可以执行bash进入

子进程测试效果,如果要返回父进程要执行exit指令

4.4 算法

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

4.4.1 使用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

4.4.2 $[  ]  运算  使用$((  )) 可以实现相同效果

echo $[2*2]

echo $[2-2]

echo $[2/2]

echo $[2%2]

a=10

b=20

expr $a + $b

echo $[a+b]

4.4.3 let命令的使用

●使用let命令,不输出结果,专用于变量的创建或者变量的自增减

 let a=1+1   //创建变量

变量的自增减:

常规写法       主流写法

let a=a+1       let a++     变量a加1

let a=a-1       let a--      变量a减1

let a=a+10      let a+=10   变量a加10

let a=a-10      let a-=10    变量a减10

let a=a*2       let a*=2     变量a乘以2

let a=a/2       let a/=2    变量a除以2

let a=a%3      let a%=3    变量a除以3取余数

●使用bc,可以进行小数计算

echo "1.1+1" | bc

echo "10/3" | bc

echo "scale=2;10/3" | bc      //scale可以定义结果是小数点后多少位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值