文章目录
简介
虽然shell脚本语法不难,难的是各项指令,但是还是记录下常规的命令。
shell符号,内置命令速记
- 符号
() : 在子shell执行命令 (ls)
(()):可以进行数值比较 ((1<2))
$()与``:应用替换 touch $(date +%F)_file.txt
$(()):数值运算 $((1+2))
${
}:变量的引用
[]:条件测试 -a 与条件 -o 或条件
[[ =~ ]]: 正则匹配 &&与条件 ||或条件
$[]:整数运算 $[2**10] 2的10次方
- 内置命令
: 返回真与true同效
wait 内部变量,等待前面所有后台进程结束
########
OLD_IFS=$IFS
IFS=$'\n' 内部变量,重新定义分隔符
IFS=$OLD_IFS 恢复之前的换行符
########
sleep 1 内部关键词,睡眠1s
exit 程序退出
echo -n 不换行打印
continue 和c语言类似,不过后面跟数字可以跳过多次循环
break 和C语言类似,不过后面跟数字可以跳出多层循环
shift 将位置参数向左移动,可以跟数字
#!/usr/bin/bash
while [ $# -ne 0 ]
do
let sum+=$1
#将外界的位置参数左移一位,舍去最左边的那个
shift 1
done
echo "sum: $sum"
调试语法
sh -n xx.sh 仅调试syntax error
sh -vx xx.sh 以调试的方式执行,查询整个执行过程
time xx.sh 计算脚本运行的时间
命令的排序
#!/usr/bin/bash
ping -c1 www.baidu.com && echo "www.baidu.com is up" || echo "www.baidu.com is down"
&& 和 || 的语法其实和C语言差不多,在C语言中&&前一项正确会执行后面一项,如果&&前面一项错误就不会执行后面的,||是前面正确就不执行后面的,否则会执行后面的,所以上面语句可以以||为分界线话为两部分。
ping -c1 www.baidu.com 成功就会执行echo “www.baidu.com is up”,这个必然成功,所以echo "www.baidu.com is down"不会输出。
ping -c1 www.baidu.com 成功则"www.baidu.com is up"不执行,会执行echo “www.baidu.com is down”
重定向输出
当文件描述符(0,1,2)与重定向符号(<)组合之后,就可以重新定向输入,输出,及错误。
*
command 2>file1
命令执行的错误信息保存到了file1文件中。显示屏只是显示正确的信息。
command 1>file1 2>file2
命令执行后,没有显示。因为正确输出到file1,错误定向到file2
command &>file1
命令执行后,输出和错误都定向到file1中
command >&文件描述符
定义“错误”输出到STDERR指定的文件
cat test.sh
#!/bin/bash
echo " this is ERROR " >&2
错误输出指定到文件file1
[root@localhost ~]# ./test 2>file1
this is output
>> :追加重定向输出
shell通配符
和正则表达式差不多,但是有差别不能混为一谈
* : 匹配任意字符
? : 匹配任意一个字符
[]: 匹配括号中的惹你一个字符[abc][a-z][0-9 ][a-zA-Z0-9][^a-z](取反)
(): 在子shell中执行命令
{