目录
使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进行交互界面,可以用echo结合管道符使用
shell脚本
1、shell概述
linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个“命令解释器”的角色。负责接受用户输入的操作指令并进行解释,将需要的执行的操作传递给内核执行,并输出结果。
2、shell脚本的构成
1、脚本申明(解释器):
若第一行为"#!bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其他类型的解释器,比如:#!usr/bin/python、#!/usr/bin/expect
2、注释信息
以"#"开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行
3、可执行语句
比如echo命令,用于输出" "之间的字符串
编辑格式:vim/root/yyh.sh
#!/bin/bash
echo "hello world"
3、shell脚本的执行
方法一:指定路径的命令,要求文件必须有x权限
chomd +x /root/yyh.sh
指定绝对路径:/root/yyh.sh
指定相对路径:./yyh.sh
方法二:指定shell来解释脚本,不要求文件必须有x权限
sh 脚本路径:sh yyh.sh
source 脚本路径:.yyh.sh 或者 source yyh.sh
4、管道符操作 |
将管道符号"|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道。
5、重定向
1、交互式硬件设备
类型 | 设备文件 | 文件描述编号 | 默认设备 |
标准输入 | /dev/stdin | 0 | 键盘 |
标准输出 | /dev/stdout | 1 | 显示器 |
标准错误输出 | /dev/stderr | 2 | 显示器,2, |
2、重定向操作类型
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据 |
重定向输出 | > | 将标准输出结果保存到指定的文件,并且覆盖原有内容 |
>> | 将标准输出结果追加到指定的文件的尾部,不覆盖原有内容 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件,并且覆盖原有内容 |
2>> | 将错误信息追加到指定的文件的尾部,不覆盖原有内容 | |
混合输出 | &> | 将标准输出、标准错误保存到同一文件中 |
2>&1 | 将标准错误输出重定向到标准输出 |
6、变量的分类
1.变量的分类
环境变量:有系统维护,应用设置工作环境
位置变量:通过命令行给脚本程序传递参数
自定义变量:由用户自己定义,修改和使用
预定义变量:bash中内置的一类变量,不能直接修改
2.定义新的变量
格式:变量名=变量值
变量命名规则:以字母或下划线开头,区分大小写
3.自定义变量
Bash中的变量操作相对比较简单,不像其他高级编程语言((如c/C++、Java等)那么复杂。在定义一个新的变量时,一般不需要
提前进行声明,而是直接指定变量名称并赋给初始值(内容)即可
格式:变量名=变量值
变量名:临时存放数据的地方
变量值:临时的可变化的数据
等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、一、*、/、.、 ?、8、&、#等)
用echo查看和引用变量的值
通过在变量名称前添加前导符号"$”,可以引用一个变量的值,使用echo命令可以查看变量,可以在一条echo 命令中同时查看多个变量值
当变量名称容易和紧跟其后的其他字符混淆是,需要添加“{}”括起来,否则将无法确定正确的变量名称,对于未定义的变量,将显示为空置。
赋值时使用引号
双引号" ":允许通过$符号引用其他变量值
单引号' ':禁止引用其他变量值,$视为普通字符
反撇号`:命令替换,提取命令执行后的输出结果。`..` 和$(..)作用相同
使用反撇号难以在一行命令中实现嵌套替换操作,这是可以该用"$()"来代替反撇号操作,以解决嵌套的问题
7、read命令获取输入内容
方法一:
read -p "提示信息" 变量名
echo $变量名
方法二:
echo -n "提示信息"
read 变量名
echo $变量名
8、变量作用范围export
可以通过内部命令export将指定的变量导出为全局变量,使用户自定义的变量在所以的子shell环境中可以继续使用。
格式1:export 变量名
格式2:export 变量名=变量值
9、整数变量的运算
格式:expr 变量1 运算符 变量2
运算符:+ 加法 - 减法 \*乘法 /除法 %取余
常用的运算方式:
i=$(expr 12 \* 5)
i=$((12 * 5))
i=$[12 * 5]
let i=12*5
i++ 相当于 i=$[$i+1]
i-- 相当于 i=$[$i-1]
i+=2 相当于 i=$[$i+2]
使用bc进行运算,支持小数运算,但在脚本中不可直接使用否则会进行交互界面,可以用echo结合管道符使用
布尔值:真或假,成立或不成立
bc还可以做逻辑运算,真为1,假为0
10、环境变量
使用env命令可以查看到当前工作环境的环境变量
变量user表示用户名称,home表示用户的加目录,lang表示语言和字符集,pwd表示当前所在的工作目录,变量path表示可执行程序的默认搜索路径。
11、只读变量
用于变量值不允许被修改的情况
12、位置变量
当执行命令操作时,第一个字符表示命令名或脚本程序名,其余的字符表示按照从左到右的顺序一次赋值给位置变量。
$n:n为是数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}。
13、预定义变量
$*、$@:表示命令或脚本要处理的参数 $*:把所有参数看成空格分隔的一个字符串整体,代表"$1 $2 $3 $4" $@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立的,代表"$1 $2 $3 $4" $0:表示当前执行的脚本或命令的名称 $#:表示命令或脚本要处理的参数的个数 $?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常用于shell脚本中return退出函数并返回的退出值。
$0
$?
$#
$*
脚本进行备份
14、引用变量
echo选项:
echo -n:表示不换行输出
echo -e:输出转义字符,将转义后的内容输出到屏幕上
常用的转义字符:
\c:不换行输出,在\c后面不存在字符的情况下,作用相当于echo-n
\n:换行
\t:转义后表示插入tab,即制表符
15、取消定义
unset 变量名
特殊操作:
双引号":主要起界定字符串的作用,特别是当要赋值的内容包含空格时,必须以双引号括起来
1、当内容中有空格
2、当以变量的值进行赋值