Shell、变量、数值运算

什么是Shell

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

---通常指 /bin/bash

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

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

Shell的使用方式

交互式     —— 命令行

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

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


非交互式  —— 脚本

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

---批量执行、效率高

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

常见的Shell程序种类

如何切换 Shell 环境

---通过usermod、chsh更改登录 Shell

---手动执行目标 Shell 程序

查看所有可用的Shell

---cat /etc/shells

[root@pc2 ~]# cat /etc/shells
/bin/sh                #多数 Unix 默认的 Shell
/bin/bash              #多数 Linux 默认的 Shell
/usr/bin/sh            
/usr/bin/bash

Bash基本特性

命令行环境回顾

---快捷键、Tab 键补齐

---命令历史

---命令别名

---标准输入输出

---重定向

---管道操作

Shell脚本

提前写好可执行语句,能够完成特定任务的文件

---顺序、批量化处理

---解释器程序

脚本编写规范

1、声明解释器(#!解释器路径)

2、注释(#可以描述脚本的功能,作者信息,变量作用等)

3、任务指令(可执行语句)

脚本执行方法

一、添加 x 权限,然后用相对路径或绝对路径执行

[root@pc2 opt]# cat test01.sh 
#!/bin/bash
#测试脚本
echo ABC
echo nb
[root@pc2 opt]# chmod +x test01.sh
[root@pc2 opt]# /opt/test01.sh
ABC
nb
[root@pc2 opt]# ./test01.sh
ABC
nb

二、使用解释器执行,无需 x 权限,会开启解释器子进程

登录(root)——bash进程——bash进程——echo(脚本结束解释器子进程结束退出)

[root@pc2 opt]# cat test01.sh 
#!/bin/bash
#测试脚本
echo ABC
echo nb
[root@pc2 opt]# chmod -x test01.sh
[root@pc2 opt]# /opt/test01.sh
-bash: /opt/test01.sh: 权限不够
[root@pc2 opt]# bash /opt/test01.sh
ABC
nb
[root@pc2 opt]# ls /bin/bash
/bin/bash
[root@pc2 opt]#

三、使用 source 或 . 命令执行,无需 x 权限,不会开启解释器子进程

调用系统当前Shell解释器程序,不开解释器子进程

登录(root)——bash进程——echo

[root@pc2 opt]# cat test01.sh 
#!/bin/bash
#测试脚本
echo ABC
echo nb
[root@pc2 opt]# source test01.sh 
ABC
nb
[root@pc2 opt]# . ./test01.sh 
ABC
nb
 

source #当前正在使用的解释器

四、二与三比较

#!/bin/bash
#测试脚本
echo ABC
mkdir abc
cd abc
[root@pc2 opt]# source test01.sh 
ABC
[root@pc2 abc]# pwd
/opt/abc

[root@pc2 abc]# cd ..
[root@pc2 opt]# ls
abc  test01.sh
[root@pc2 opt]# rm -rf abc/
[root@pc2 opt]# ls
test01.sh
[root@pc2 opt]# bash test01.sh 
ABC
[root@pc2 opt]# ls
abc  test01.sh
[root@pc2 opt]# pwd
/opt
[root@pc2 opt]# 

调试Shell脚本

主要途径

---直接观察执行中的输出、报错信息

---通过 bash -x 开启调试模式   -v选项

---在可能出错的地方设置echo

重定向

> 重定向标准输出

2> 重定向错误输出

&> 重定向所有输出

什么是变量

常量:固定不变的内容

以固定名称存放,可能会变化的值

---提高脚本对任务需求、运行环境变化的适应能力

---方便在脚本中重复使用

变量的分类

一、自定义变量

由用户自主设置、修改及使用

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

变量名=值

a=10 创建变量(对变量赋值)

a=20 对变量重新赋值

echo $a(echo $变量名) 调用变量

echo ${a}RMB 大括号可以防止变量名和常量混淆


变量的失效

---退出定义变量的Shell环境时,变量会自动失效

---unset a(unset 变量名) 取消变量

a=        将变量 a 赋值为空,也相当于取消变量

二、环境变量

变量名通常都大写,由系统维护,用来设置工作环境,只有个别变量用户可以直接更改

常见的环境变量

USER 当前用户名

UID     当前用户 id 号

HOME 当前用户家目录

SHELL 当前用户解释器

PWD    当前位置

HOSTNAME 主机名

PS1      一级提示符

PS2      二级提示符

PATH    存储了命令的路径


配置文件

---/etc/profile(全局环境变量信息)

---~/.bash_profile(当前用户的环境信息,用户登录时读取)


相关操作

---env:列出所有的环境变量

---set:列出所有变量

三、位置变量与预定义变量

bash内置,存储执行脚本时提供的参数

bash内置,一类有特殊用途的变量,可直接调用,但不能直接赋值或修改

在执行脚本时提供的命令行参数

$1        脚本后第1个位置参数

$2        脚本后第2个位置参数

$3        脚本后第3个位置参数

用来保存脚本程序的执行信息

$0       当前所在的脚本名称或解释器进程

$*        所有位置变量的值

$#        已加载的位置变量的个数

$$        随机的进程号(当前运行进程的PID号)

$?        可以检测上一个指令是否执行成功,0是正常,非0是异常(前一条命令执行后的返回状态)

$!         后台运行的最后一个进程的进程号

变量的作用范围

局部变量

---新定义的变量默认只在当前Shell环境中有效

---无法在子Shell环境中使用


全局变量

---全局变量在当前Shell及子Shell环境中均有效

---使用 export 可将局部变量声明为全局变量

export 局部变量名[=变量值]        #为局部变量添加全局属性

export -n 全局变量名                   #取消指定变量的全局属性

区分三种定界符

' ' 界定范围  禁用扩展,即便 $ 也视为普通字符,可以屏蔽特殊符号的功能

" " 界定范围 允许扩展,以 $ 引用其他变量

` ` 或者 $() 将命令的执行输出作为变量值

read标准输入取值

一、read 从键盘读入变量值完成赋值

格式:read [-p "提示信息"] 变量名

选项:

--- -p 输出提示信息

--- -t 可指定超时秒数

--- -n 限制读取字符

二、终端显示控制

stty -echo(关闭终端输出——无显示)

stty echo(恢复终端输出——显示)

运算赋值

let 变量名=运算表达式

[root@pc2 ~]# a=1+1
[root@pc2 ~]# echo "$a"
1+1
[root@pc2 ~]# let a=1+1
[root@pc2 ~]# echo "$a"
2
[root@pc2 ~]# let a+=1
[root@pc2 ~]# echo "$a"
3
[root@pc2 ~]# let a+=5
[root@pc2 ~]# echo "$a"
8
[root@pc2 ~]# 

整数运算,加减乘除 求模(取余)

一、expr 运算工具

计算指定的表达式,并输出结果

格式:expr 整数 运算符 整数

运算符两边需要有空格

乘法操作应采用 \* 转义,避免被作为Shell通配符

运算符

+加  -减  \*乘  /除  %取余(求模)

二、$[ ]或$(( )) 算式替换

使用 $[ ] 或 $(( )) 表达式

格式:$[整数 运算符 整数]

乘法操作 * 无需转义,运算符两侧可以无空格

自动识别变量,引用变量可省略 $ 符号

计算结果替换表达式本身,可结合 echo 命令输出

变量的自增/减操作

使用 $[ ] 替换,或者 let 命令来完成

结合 echo 命令查看结果

小数运算

整数运算的局限性

bash内建机制仅支持整数值运算

expr命令、$[ ] 算式替换 不支持有小数的运算


使用 bc 实现小数运算

多数Linxu系统默认安装此工具

---支持高精度的数值运算

---直接运行bc可进入交互式运算界面,quit退出

---设置 scale=n 可约束小数位

结合管道向bc发送表达式

---多个表达式以分号分隔

---通过echo命令+管道传递要计算的表达式

[root@pc2 ~]# A=12.34
[root@pc2 ~]# echo "$A*56.789" | bc
700.776
[root@pc2 ~]# echo "scale=4;$A*56.789;5/3" | bc
700.7762
1.6666
[root@pc2 ~]# 

小数值的比较

基本用法

---echo "数值1 比较符 数值2" | bc

---如果表达式成立,则返回的计算结果为1,否则返回0

---常见比较操作:>、>=、<、<=、==、!=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值