bash基础教程
bash语句
※ bash格式:#!/bin/bash
“# !” 是一个约定的标记,它告诉系统这个脚本需要什么解释器
1、shell字符串:
字符串可以用单引号,也可以用双引号,也可以不用引号.
单引号字符串:
·单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
·单引号字符串中不能出现单引号(对单引号使用转义符也不行)
双引号字符串:
·双引号里的内容可以有变量
·双引号里可以出现转义字符
拼接字符串: 表示使用多个变量与字符串拼接的变量.
获取字符串长度: ${#’变量名’} 表示对应变量名的字符长度
提取字符串: ${‘变量名’:2:5} 表示从’变量’字符串中的第3个字符开始截取5个字符串
查找字符串: expr index “变量” “查找的字符串” 会根据字符串的位置进行输出.
shell数组:
bash(shell)支持一维数组(不支持多维的),并且没有限定数组的大小.
数组元素的下标由”0″开始编号.获取数组中的元素要利用下标.下标可以是整数或算数表达式,应大于或等于”0″.
2、定义数组:
用括号来表示数组.数组元素用”空格”符号分割开.定义数字的一般形式为:
直接定义 : 数组名=(值1 值2 …值x) | 各个分量定义: 数组名[0]=xxx 数组名[1]=xxx 数组名[2]=xxx
读取数组:
读取数组元素值格式:
${数组名[下标]}
${数组名[@]}与${数组名[*]} 表示获取数组名对应的所有元素.
获取数组长度:
获取数组长度的方法与获取字符串长度的方法相同:
length=${#数组名[@]}
或:
length=${#数组名[*]}
获取数组中单个元素的长度
length=${#数组名[n]}
3、变量:
3.1、变量类型:
1、局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效.其他shell启动的程序不能访问局部变量.
2、环境变量:所有的程序,包括shell启动的程序,都能访问环境变量.有些程序需要环境变量来保证其正常运行.必要的时候shell脚本也可以自定义环境变量.
3、shell变量:shell变量时由shell程序设置的特殊变量.shell变量中有一部分是环境变量,有一部分是局部变量.这些变量保证了shelll的正常运行.
3.2、定义变量:
直接变量名赋值就可以:
export 赋值
例:
a=”test”
※ 注意事项:变量名和等号之间不能有空格.以及如下规则:
● 首个字符必须为英文大小写字母“ a-z、A-Z ”
● 中间不能有空格,可以使用下划线 “ _ “
● 不能使用标点符号
● 不能使用bash里的关键字。(即变量名不可以与其他命令相同)
3.3、使用变量:
使用定义过的变量,只要在变量名前加 ” $ ” 即可.(再次赋值时,不需要加 ” $ ” )
例:
name=’test’
echo $name
echo ${name}
变量名的大括号为可选项.为了方便解释器识别变量的边界
{}标识括号内的值为变量
3.4、只读变量:
使用readonly 命令可以将变量属性定义只读.
例:
name=’test’
readonly name
如果再次赋值 name 变量,就会报错。
3.5、删除变量:
unset命令可以删除变量,直接unset “变量名”
例:
unset“a”
删除变量a,a不在是变量
4、for循环格式
#! /bin/bash
for x(变量)in `expr 1 100`(变量的范围)
do (循环语句的开始)
…… (需要循环的命令)
done (循环语句结束)
#! /bin/bash
for ((表达式;表达式;表达式))
do (循环语句的开始)
…… (需要循环的命令)
done (循环语句结束)
for ((i=1(赋给i的原始值为1);i<10(变量i的值小于10);i++(每次循环一次,变量就加一,步进值为1)))
for ((i=1(赋给i的原始值为1);i<10(变量i的值小于10);i=i+2(每次循环一次,变量就加二,步进值为2)))
for ((i=1(赋给i的原始值为1);(表达式为空则无限循环);i++(每次循环一次,变量就加一,步进值为1)))
5、if循环格式
#! /bin/bash
if (条件1)
then (动作1)
elif (条件2)
then (动作2)
…… (命令)
else (匹配不上其他条件后匹配else)
(else的动作)
fi (条件语句的结束)
6、while无限循环格式:
#! /bin/bash
while :
do(循环语句的开始)
…… (需要循环的命令)
done(循环语句的结束)
#! /bin/bash
while true
do(循环语句的开始)
…… (需要循环的命令)
done(循环语句的结束)
7、until 循环格式:
until执行一系列的操作直至条件为真时停止.条件可以为任意测试条件,并且测试发生在循环末尾。因此至少执行一次。
until (循环条件)
do (循环语句的开始)
…… (需要循环的命令)
done (循环语句的结束)
8、printf转义序列:
\a
|
警告字符,通常为ASCII的BEL字符
|
\b
|
后退
|
\c
|
抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
|
\f
|
换页(formfeed)
|
\n
|
换行
|
\r
|
回车(Carriage return)
|
\t
|
水平制表符
|
\v
|
垂直制表符
|
\\
|
一个字面上的反斜杠字符
|
\ddd
|
表示1到3位数八进制值的字符,仅在格式字符串中有效
|
\0ddd
|
表示1到3位的八进制值字符
|
9、bash脚本命令
命令 | 解释 | 例 |
source a.sh
|
执行shlle脚本a.sh
|
|
./a.sh | 执行shell脚本a.sh 前提:有执行权限足够 执行权限添加:chmod U+x a.sh |
|
env | 查看全部环境变量 | |
export | 添加环境变量 | |
expr | 添加本地变量 | |
read | 用户手动赋值 | |
read -p“提示是信息” | 用户手动进行赋值,引号里面加的是提示信息 | |
pstree | 查看进程树 | |
sh -n | 后面跟shlle脚本文件名,检查编辑的shlle脚本是否有语法错误 | |
let | 做算术运算 | let a=$i+1 运算$i+1的值赋给a |
break | 跳出当前循环 | |
echo $? | 测试上条命令是否成功,回显0为成功,回显其他都为失败 |
10、bach脚本参数
命令 | 解释 | 例 |
-ge
|
大于或等于 | |
-gt
|
大于 | |
-le
|
小于或等于 | |
-lt
|
小于 | |
-eq
|
等于 | |
-f
|
判断文件是否存在 |
#! /bin/bash if [ -f $a.out ] then echo $a.out fi |
-d
|
判断目录是否存在 |
#! /bin/bash if [ -d $aaa ] then echo $a.out |
版权声明:本文为APeng2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。