先简单写一点,以后在整理
记性不好,看完就忘…
当我们写c或其他程序时,都有调试这一技能,调试可以说是很重要的了..能节约你的时间,shell脚本也有调试..
两种方式–执行时添加参数 脚本里添加参数
参数 | 含义 |
---|---|
-n | 不执行脚本,仅检查是否有语法错误 |
-v | 执行脚本前,把脚本内容输出到屏幕 |
-x | 将执行时的内容输出到屏幕 |
假如现在要执行的脚本叫做test.sh,那么
bash -n test.sh
可以检查脚本语法是否有错,无错误没有任何输出,echo $?可以得0.同理,其他的参数也一样.
另外这些参数可以组合使用–但是,当加入n后,脚本就不会执行了,所以-nx
的x
将不会起作用…
脚本第一行一般都是
#!/bin/bash
...#脚本内容
...
这种指定哪个解释器执行脚本的语句,这样,参数可以跟在后面:
#!/bin/bash -n
...#脚本内容
...
这样就可以检查语法错误了
另外还可以针对某一段执行,如:
#!/bin/bash
...#段1
...
set -n#开始检查语法
...#段2
...
set +n#停止检查
这样就可以只针对段2检查语法错误,-n
开始,+n
停止,另外的x
,v
也是一样
今天看脚本把&& ||和c里面的逻辑运算符混了…
符号 | 意义 |
---|---|
cmd1&&cmd2 | cmd1执行成功(返回0),cmd2才执行 |
cmd1||cmd2 | cmd1执行成功(返回0),cmd2不执行 |
这里说的返回0,是一个环境变量$?
,总之不能跟逻辑与或混了…
命令 | 意义 |
---|---|
read | 从键盘读取变量值 |
array | 数组 |
declare | 声明变量类型 |
echo $var | 查看变量内容 |
unset $var | 取消设定变量 |
set | 查看所有变量 |
export var | 将自定义变量变为环境变量,也就是子程序可以调用此变量了 注1 |
注1
:source或.执行脚本即当前shell执行,不是在子程序里执行,可以做到立即生效的作用
比较有用的几个环境变量:
变量 | 意义 |
---|---|
HOME | 代表用户的家目录 |
SHELL | 目前正在使用的shell |
PATH | 可执行文件搜索路径 |
LANG | 语言变量 |
RANDOM | 随机数变量 |
PS1 | 提示字符的设定 |
$ | 本shell 的 PID |
? | 上个执行指令的回传值 |
OSTYPE, HOSTTYPE, MACHTYPE | 操作系统、主机、机器类型 |
关于变量内容的操作
形式 | 意义 |
---|---|
${vat#str} | 从变量首开始删除,找最短符合删除 |
${vat##str} | 从变量首开始删除,找最长符合删除 |
${vat%str} | 从变量尾开始删除,找最短符合删除 |
${vat%%str} | 从变量尾开始删除,找最长符合删除 |
${var/oldstr/newstr} | 找到的第一个被替换 |
${var//oldstr/newstr} | 找到的全部被替换 |
var=${str-expr} | 变量未定义赋值,否则将str赋给var |
var=${str:-expr} | 变量未定义或为空赋值,否则将str赋给var |
var=${str+expr} | 变量若定义则赋值,否则将str赋给var |
var=${str:+expr} | 变量非空赋值,否则将str赋给var |
var=${str=expr} | 若变量str未定义,设定变量str,将值赋给str和var,否则将str赋给var |
var=${str:=expr} | 变量未定义或为空,将值赋给str和var,否则将str赋给var |
var=${str?expr} | 变量不存在报错,否则将str赋给var |
var=${str:?expr} | 变量不存在或为空报错,否则将str赋给var |
命令 | 意义 |
---|---|
cut | 使用某种格式从文件中截取每一行中的某一字段 |
grep | 利用正则表达式分析一行数据 |
sort | 根据制定格式对行排序 |
uniq | 去重 |
wc | 统计相关字、行、字符数 |
tee | 双向重导向,可以重定向输出到文件的同时依旧输出到屏幕 |
tr | 文字替换 |
col | tab替换为空格 |
jion | 归并两个文件中相同的部分 |
paste | 将两个文件贴在一起,以tab分隔 |
expand | tab转空格 |
split | 分隔文件 |
xargs | 参数代换 |
sed | 流编辑,可直接编辑文件;添加多行时要以\ 分隔;替换: sed 's/要被取代的字符串/新的字符串/g' 多用于以行为单位的处理 |
printf | 格式化打印 |
awk | 字段处理 |
diff | 比较文件差异 |
cmp | 对比文件(以字节为单位) |
patch | 根据diff修订文件 |
pr | 显示时加入标题页码 |
注
:
test命令 与判断符号 [ ]
注意:判断符号里面都要有两个空格分隔如[空格
-e filename空格
]
判断符有以下特点:
条件判断
原型:
if[ expr1];then
...
elseif[expr2];then
...
elseif[exprn];then
...
else
...
fi
原型
case $var in
变量内容1)
...
;;
变量内容2)
...
;;
*)
...
;;
easc
最后的*)
相当于switch里的default
循环
原型:
while [ condition ]
do
程序段落
done
until [ condition ]
do
程序段落
done
for var in con1 con2 con3 ...
do
程序段
done
#作为循环选取,可使用`$(seq 1 100)`或bash内建的{1..100}来完成1
#到100序列,字母也可以如{a..g}
for (( 初始值; 限制值; 执行步阶 ))
do
程序段
done