变量的声明和使用
1、用户自定义变量
变量的声明格式及赋值如下: 变量=值(注意等号两边不能有空格) 对用户自定义变量进行调用需要在变量前加$,而且需要用 { } 括号括起来,同其他字符分开。 |
2、位置变量,也称为参数变量
bash在解释用户命令时,会把所输入的命令后面的参数使用位置变量传递给bash脚本程序 例如这条命令: mv old.txt new.txt $1,$2,...,$n 分别代表参数1、参数2。 $0 代表脚本的名字。 $* 这个变量包括参数的列表。 $@ 这个变量包括参数的列表(用空格隔开)。 $# 这个变量包括参数的个数。 |
3、环境变量,shell运行时系统运行时自动设置的一些变量
【shell环境变量】
环境变量 | 说明 |
$HOME | 用户的主目录 |
$IFS | 内部的域分隔符,一般为空格符、制表符或换行符 |
$PATH | 寻找命令或可执行文件的搜索路径列表,路径以冒号分隔 |
$PS1 | 主命令提示符,默认为“$” |
$PS2 | 从命令提示符,默认为“>” |
$TERM | 使用的终端类型 |
【shell脚本程序特色变量】
环境变量 | 说明 |
$$ | shell脚本的进程号 |
$? | 紧邻的前驱命令的返回值 |
$* | 参数列表,各个参数之间用环境变量IFS中的而第一个字符隔开 |
$@ | 参数列表,它是$*的一种变体,它不使用IFS环境变量,所以当IFS为空时,参数的值不会结合在一起 |
$0 | shell脚本名称 |
$n | 位置参数1 2 3..... |
算术运算
1、expr命令把一个算术表达式最为参数: expr arg
arg通常为“[操作数] [运算符] [操作数]”
用户必须保证参加算术运算的操作数必须为数值。
2、let命令实现运算 : let arg1 [arg2....]
3、使用 $() 扩展,把准备求职的表达式放在里面
条件判断
与C语言相反,0表示真,1表示假。
1、比较两个字符串之间的关系
字符串比较 | 说明 |
string1 != string2 | 相同为真 |
string1 = string2 | 不同为真 |
-n string | 不空为真 |
-z string | 空为真 |
2、比较两个整数之间的关系
算术比较 | 说明 |
expr1 -eq expr2 | 相等为真 |
-ne | 不等为真 |
-gt | 大于为真 |
-lt | 小于为真 |
-ge | 大于等于为真 |
-le | 小于等于为真 |
!expr | 表达式为假 则真 |
3、测试文件是否存在或是否具有某种状态或属性
-d file | 如果文件是一个目录,则真 |
-e file | 文件存在 ,则真 |
-f file | 文件是普通文件 ,则真 |
-g file | 文件的SGID为被设置,则真 |
-r file | 文件可读,则真 |
-s file | 长度不为0,则真 |
-u file | 文件SUID为被设置,则真 |
-w file | 文件可写,则真 |
-x file | 文件可执行,则真 |
condition1 -a condition2 | 逻辑与 |
condition1 -o condition2 | 逻辑或 |
!condition1 | 逻辑非 |
4、多个条件的逻辑组合(与或非)
控制结构
1、if分支语句
if 条件1
then
命令
[elif 条件2
then
命令]
[else
命令]
fi
2、case分支语句
case 条件 in
模式1)
命令1
;;
[模式2)
命令2
;;
.....
模式n)
命令n
;;]
esac
下面列举一些常用的匹配规则:
? 仅仅与一个任意字符匹配
* 匹配任意字符
[..] 同方括号内的任意一个字符相匹配
[!..] 与所有不在方括号中的某个字符匹配
{c1,c2} 同c1或c2箱匹配
3、for语句
for 变量 [in 列表]
do
命令
done
for语句循环遍历列表中的各个值,对每个值执行一次语句块 。如果中括号中的部分省略掉,bash则认为是“In$@”,即执行该程序时通过命令行传给程序的所有参数的列表。
4、while和until语句
while/until 条件
do
命令
done
与循环有关的命令有:break continue shift,用于调整位置变量的,每执行一次shift,就使位置变量左移动一个位置
函数使用
[function] 函数名()
{
命令
}
函数名[参数1 参数2 ....参数n]
如果没有在一个函数内使用return命令指定一个返回值,,函数返回的就是执行的最后一条命令的返回值。