#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。
echo 窗口输出文本
-e 开启转义
\c 不换行
\n 换行
printf 窗口输出文本,不会自动添加换行符
%数字s 字符串,宽度为n个字符,-数字表示左对齐,无则标素有对象,内容不足空格填充,超过也会显示除所有内容. %50s
%-数字1.数字2f 浮点数总长度为数字1,不足空格代替,小数点保留数字2,不足四舍五入。%-10.2f
%d 有符号十进制整数,对应位置参数必须是十进制整数,否则报错
%c 字符
%b 开启转义,后面输出字符串中若含有转义字符会进行转义
\0 字符串结束标志
\b 退格
\r 回车
\t 制表符
\v 垂直制表符
\f 换页
\ddd 1到3位数八进制值的字符
\xhh 16进制表示字符
read 读取数据如数据
-p 输入提示文字
-n 输入字符长度限制,到达限制长度时,自动结束
-t 输入时长
-s 隐藏输入内容
{} 花括号识别变量的边界
变量名规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线_。
不能使用标点符号。
不能使用bash里的关键字readonly 将变量变更为只读
unset 删除变量,不能删除只读变量${#string} 获取字符串长度
${string:0:4} 截取字符串,从下标为0的后4个字符串
`expr index "$string" a` 获取字符串a第一次出现的位置,注意` 是反引号不是单引号 '
数组名=(值1 值2 ... 值n);数组名[0]=value0 定义数组,括号表示数组,数组元素用"空格"分割,下标没有范围
${数组名[下标]} 获取数组,@ 作为下标可以获取数组所有数据
[@][*][n] 获取数组长度
# 单行注释
:<<EOF EOF(eof可以使用其它符号代替) 多行注释
$n 执行脚本时传递参数,数字为几代表第几个
$* 显示所有传递的参数
$@ 分号分隔显示所有传递的参数
+ 加 `expr $a + $b`
- 减
\* 乘 条件表达式要放在[]之间,并且要有空格
/ 除
% 取余
= 赋值或者判断两字符串是否相等
== 等于
!= 不等于
-z 判断字符串长度是否为0,为0 true
-n 字符串长度是否为0,不为0 false
$ 判断字符串是否为空
-eq 判断是否相等,等同于 ==
-ne 判断是否不相等,等同于 !=
-gt 左边是否大于右边,等同于 > 只支持数字
-ge 左边是否大于等于右边,等同于 >=
-lt 左边是否小于右边,等同于 <
-le 左边是否小于右边,等同于 <=
!非 > -a 与 > -o 或 && and || 或者
-b file 判断文件是否是块设备文件 是 返回true
-c file 判断文件是否是字符设备文件 是 返回 true
-d file 判断文件是否是目录 是 返回 true
-f file 判断文件是否是文件 是 返回 true
-g file 判断文件是否设置了SGID 位 是 返回 true
-k file 判断文件是否设置了粘着位(Sticky Bit) 是 返回 true
-p file 判断文件是否是有名管道 是 返回 true
-u file 判断文件是否设置了 SUID 位 是 返回 true
-r file 判断文件是否可读 是 返回 true
-w file 判断文件是否可写 是 返回 true
-x file 判断文件是否可执行 是 返回 true
-s file 判断文件是否为空(文件大小是否大于0),不为空返回 true
-e file 判断文件(包括目录)是否存在 是 返回 true
-S 判断某文件是否 socket
-L 判断文件是否存在并且是一个符号链接
test 检测条件是否成立
[] 执行基本算术运算符,等号两边不能有空格,var=$[a + b]等同于var=`expr $a + $b `
-e fileName 如果文件存在则为真
-r fileName 如果文件存在且可读则为真
-w fileName 名 如果文件存在且可写则为真
-x fileName 如果文件存在且可执行则为真
-s fileName 如果文件存在且至少有一个字符则为真
-d fileName 如果文件存在且为目录则为真
-f fileName 如果文件存在且为普通文件则为真
-c fileName 如果文件存在且为字符型特殊文件则为真
-b fileName 如果文件存在且为块特殊文件则为真
if then else fi if else条件
if then elif then fi if elseif条件for var in 参数 do 输入内容 done for循环
while 判断 do done while语句
let arg 执行表达式,计算时不需要 $ 来表示变量,自加,自减语法 let var++;let var--;let var-=10
until condition do done 条件为false进入,true停止跟while相反,while循环优于until
case 值 in
模式1) ;;
模式n) ;; 多选,每一模式必须以右括号结束。取值可以为变量或常数
*);; 其它
esac
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
0 标准输入文件
1 标准输出文件
2 标准错误文件
注:重定向文件到/dev/null,可以起到禁止输出效果. fileName 引入外部脚本,注意点号(.)和文件名要用空格分隔