查看当前环境下使用的shell,可以使用“echo $SHELL”
**运行shell:**shell脚本是纯文本文件,通常以.sh作为后缀名,方便系统识别文件类型,但不是必需的。脚本文件中的第一行要指明系统使用哪种shell解释该shell文件,如#!/bin/bash、#!/bin/sh。运行shell脚本有两种方法:一种是赋予执行权限,直接运行;另一种是使用bash命令直接运行脚本(这种方式会忽略脚本文件是否有执行权限。)。
shell变量 概述- shell变量主要有用户自定义变量、环境变量、位置变量和预定义变量。
- shell变量无须声明,可以直接使用或赋值。清除变量可以使用“unset 变量名”命令来实现。
- shell变量没有数据类型的概念,不管向变量赋什么值,都会被作为字符串。
- 注意变量名区分大小写。变量名通过“变量名=值”的形式来定义一个变量的值,等号“=”左右两边不能有空格。
- 1.值如果用单引号‘’括起来,则单引号内部的全部内容都会作为普通字符输出; 2.如果用双引号"“括起来,则双引号内部会解析$(美元符号)、\(反斜杠)、` 反引号)和”(双引号)这些特殊字符; 3. 如果用反引号(在键盘上Esc键下边,1的左边)括起来,则反引号内部的内容会作为可以执行的命令赋值给该变量。
- 使用shell变量时,需要在变量名前面加美元符号“$”,也可以把变量名用花括号{}括起来帮助解释器识别变量的边界。
环境变量一般是指定操作系统运行环境的一些参数,通常由系统在启动时设置,一般用大写字母表示。常见的环境变量如下:
PATH:系统路径。
HOME:当前用户的主目录。
HOSTNAME:主机名称。
LOGNAME:当前登录的用户名。
SHELL:当前使用的shell类型。
HISTSIZE:保存历史命令记录个数
可以使用env命令查看所有环境变量,也可以通过echo命令查看某个环境变量
位置变量和预定义变量是特殊的变量,有特定的含义。
位置变量在运行shell脚本文件时,可以使用位置变量在脚本文件内部接收命令行传递的参数,也可以在调用函数时向函数内部传递参数。这种在脚本文件或函数内部接收参数使用的$n称为位置变量,即执行shell脚本时获取命令参数信息的变量。
预定义变量例如,$1是接收第一个参数的位置变量,$2是接收第二个参数的位置变量,依次类推,n表示参数接收顺序。注意,$0表示命令本身或脚本文件名,无论脚本是否有参数, 0 均 可 用 ; 如 果 n 大 于 9 , 则 需 要 用 一 对 花 括 号 括 起 来 , 如 0均可用;如果n大于9,则需要用一对花括号{}括起来,如 0均可用;如果n大于9,则需要用一对花括号括起来,如{10}。
预定义变量是在shell一开始时就定义好的变量,不能重新定义,用户只能根据shell的定义来使用这些变量。预定义变量的表示方法和意义如下:
变量替换是一种为变量赋值的方式,根据变量的状态来改变它的值。如果变量已经存在并不为空,则不改变变量的值;如果变量不存在或值为空,则给该变量赋新值。变量替换的一般形式为:变量2=${变量1op新值} 其中,op是:-、:+、:=、:?4个操作符中的一个,注意操作符前后没有空格。
变量2=${变量1:-新值}:如果变量1不存在或为空,则给变量2赋新值,但不改变变量1的值。
变量2=${变量1:+新值}:如果变量1不空,则给变量2赋新值,但不改变变量1的值。
变量2=${变量1:=新值}:如果变量1不存在或为空,则给变量2赋新值,并将变量1的值设置为新值。
变量2=${变量1:?新值}:如果变量1不存在或为空,则将新值发送到标准错误输出,可以用来检测变量1是否可以被正常赋值。这种替换出现在shell脚本中,脚本将停止运行。
输入/输出
read命令用来接收标准输入(键盘)的输入,为变量赋值。read的命令格式如下:
read 选项 变量名
部分选项如下:
-p:后跟一条提示信息,即在输入前打印提示信息。
-t:后跟数字,用来指定等待用户输入的秒数。
-n:后跟数字,用来指定接收的字符个数。
-s:隐藏输入的数据,即输入数据时不在屏幕上显示,通常用于输入密码等机密信息。
echo命令用于变量值或字符串的输出,并在最后默认加上换行符。echo命令格式如下:
echo 选项 输出内容
shell计算选项:
-e:支持反斜线的控制字符的转换,部分控制字符见下表。
-n:取消输出后行末的换行符号,即内容输出后不换行。
shell的算术运算符也主要包括加(+)、减(-)、乘(*)、除()、求余(%)和幂运算(**)等,由于shell中每一个变量的值都是字符串,因此并不能直接进行算术运算。在shell中需要使用数学计算命令实现算术运算。shell中常见的数学计算命令如下:
其中,bc可以处理浮点型数据,其余的命令均可处理整数;expr还可以处理字符串,但有很多格式要求;declare -i虽然可以进行整数运算,但仅支持最基本的加、减、乘、除和取余运算,并不支持逻辑运算。(())、let和$[]相似,都可以用于整数运算。
双小括号(())是shell中专门用来进行整数运算的命令,写法灵活。(())命令格式:((表达式))
- 表达式可以有一个,也可以有多个;
- 若有多个表达式,表达式之间用逗号“,”分隔,以最后一个表达式的值作为整个命令的执行结果。
- 在双小括号前需要加$,才可以获取(())命令的计算结果,结果可以赋值给变量,也可以使用输出命令echo直接打印出来。
- 在双小括号里面使用变量,变量前面不需要加$,(())会自动解析变量名。
[root@localhost cheney]# ((1+2))
[root@localhost cheney]# echo ((1+2))
bash: 未预期的符号 `(' 附近有语法错误
[root@localhost cheney]# echo $((1+2))
3
[root@localhost cheney]# echo $((1+2,8+9))
17
bc命令
bash shell内置对整数运算的支持,但不支持浮点运算。bc是一种支持任意精度的计算器语言,能够很方便地进行浮点运算。
交互模式:在shell命令行中通过bc命令进入交互式计算模式,会显示bc的版本信息和简单介绍,若想进入交互模式而不显示这些内容,则可以添加“-q”选项,即使用“bc -q”进入交互模式。输入quit可以退出bc的交互模式。
- 直接输入要计算的表达式 (如3.14*2)并按Enter键,会立即返回计算结果(6.28)
- 在做除法或求余运算时,需要用bc的内置变量scale指定小数位数,默认为0。
- bc还支持使用变量实现计算,变量一旦被定义,就可以在当前会话中被使用,使用bc中定义的变量不需要在变量名前加$符号。
bc计算命令可以在shell命令行或脚本中使用,基本格式如下:
变量=$(echo "[定义变量];表达式"|bc) # 表达式就是希望计算的数学表达式 # 若需要指定小数位数或需要使用变量,则要在表达式前指定scale的值或定义变量 # 多个表达式之间用分号“;”隔开。 # 使用shell命令行中的变量,需要用$符号,使用bc中定义的变量,不需要$符号。
例如:
[root@localhost cheney]# echo "1+2" 1+2 [root@localhost cheney]# echo "1+2"|bc 3 [root@localhost cheney]# b=3 [root@localhost cheney]# echo "scale=3;a=8;a/$b"|bc 2.666流程控制
shell具有一般高级程序设计语言所具有的流程控制结构。当用户需要根据不同情况选择执行不同的命令时,可以使用if和case选择结构实现分支控制。当用户需要重复执行相同的命令时,使用for、while和until等循环结构实现循环控制。若循环次数已知或确定,可以使用for循环;若不知道循环次数,需要根据判断条件是否为真决定是否继续循环,使用while语句和until循环。当需要在未达到循环结束条件时强制跳出循环,通过break和continue实现。



