基本语法
第一行
指定用什么解释器: #! /bin/bash (使用bash解释器)
可以通过vim /etc/shells 查看本机支持什么解释器
所以运行的时候要选择对应的解释器:/bin/bash ./test.sh( 运行脚本的方式:./+filename)
变量
创建: 与string定义类似:name="name",但是不能是shell关键字
删除:unset name
使用:在变量前加 $name,可以加{}来识别边界
shell字符串
可用单引号,双引号或无引号,最好使用双引号,因为双引号中可以输出变量
获取长度:#name,还有其他操作
数组
定义:name=(str1 str2) 之间用空格隔开
使用:获取某个元素:name[index]
获取所有元素:name[@ | *]
获取元素个数与字符串相同:#name[*]
注释
单行注释:#
多行注释: :<<EOF 注释内容 EOF
shell传递参数
在脚本中获取参数的方式为:$n, n为传递进来参数的顺序
例如:/bin/bash ./test.sh 1 2 3 ,在脚本中可以通过$1,$2。。来获取参数
运算符
算数运算符与正常的相似
关系运算符:-eq:等于 -ne:不等 -gt:大于 -lt:小于 -ge:大于等于 -le:小于等于(以上所有结果返回boolean值)
逻辑运算符:&& ||
字符串运算符:= 两个字符串是否相等 != 不等 -z 长度是否为0 (均返回Boolean)
str判断字符串是否为空,不为空返回true
文件测试运算符:-d filename 文件是否是目录
- -f filename 文件是否是普通文件
- -r/w/x filename 文件是否可读/写/执行
- -s filename 文件是否为空
- -e filename 检测文件(目录)是否存在
echo:用于输出内容
输出内容:echo "name"
输出并换行:echo "name \n",还可以用其他的转义字符
printf:类似于C语言的输出,可以输出很多格式和转义
test命令:测试某个条件是否成立
shell流程控制
if-else-fi(注意结束要用fi)
与java语言不同,流程控制不能为空,如果else中没有内容,那么就不要写else
for循环
for item in item1 item2 item3 item4
do echo $item .......
done
while语句
while 条件(read file->指读取键盘的输入信息,将信息赋值给变量file)
do .....
done
case语句
case 值 in
case1)
command1
。。。。。
;;
case2)
command1
。。。。。
;;
esac(结束语句,case反过来)
跳出循环
breake(结束循环)
continue(跳出本次循环)
shell函数
[ function ] funname [()] { []是可选的意思
action;
[return int;]
}
函数返回值在调用该函数后通过 $? 来获得
shell输入/输出重定向
输出重定向:command > file:表示执行完命令后将输出的结果存入file中,内容将会被覆盖,如果是想要追加到末尾用>>
输入重定向:command < file:表示将文件中的命令读取到command中
shell文件包含
shell包含脚本,将一些公用的代码封装
语法:. filename(.和filename之间有空格) 或 source filename
可在引用的文件中使用被引用文件的所有内容(变量。。。)