1,获取命令执行的结果,字符串拼接(脚本最常使用的功能)
cmd_result=$(date +%Y%b%d) //使用变量获取命令执行的结果 或者 cmd_result=`date +%Y%b%d` 反引号
mysqldump -uroot -pfeng --all jiale>/root/jiale$cmd_result.sql //执行字符串和变量拼接,也可以使用${cmd_result}
2.使用#来注释,以及脚本执行的方法
脚本的开头一般是
#!/bin/sh
因为脚本前两个字符一般是#!,系统会将这两个字符之后的字符作为执行脚本的命令解释器的绝对路径(也可以是其他脚本解释器的路径)
脚本执行的三个方法
(1)chmod u+x 脚本名 //给脚本执行权
./脚本名
(2)bash 脚本名 //直接使用shell启动命令一般比上面的方法要慢一些
sh 脚本名
(3)使用bash内部命令source或“.”运行脚本
source 脚本名
. 脚本名 //“.”之后必须有一个空格
3,I/O重定向,管道(|)和后台运行
cmd1 > file1 | 将命令1 的结果输入到文件1中 |
cmd1 > >file1 | 将命令1 的结果追加到文件1中 |
cmd1 < file1 | 将文件1 的内容输出作为 命令 1执行 |
cmd1 << file1 | 将文件1 的内容追加到 命令 1 |
cmd1 2> file1 | 错误输出重定向,命令1执行的错误信息会输入给文件1 |
cmd1 &> file1 | 标准输出与错误输出重定向,标准输出和错误输出一起输入到文件1中,屏幕将无显示 |
命令1 |命令2|命令1
将命令1的结果,输出给命令2,作为命令2的输入,再将命令2的结果输出给命令3,作为命令3的输入
命令1 |&命令2|命令1
将命令1的标准结果和标准错误信息,输出给命令2,作为命令2的输入,再将命令2的结果输出给命令3,作为命令3的输入
在命令后加入&,可以让命令到后台运行
COMMAND &
# gcc myproc.c&
4,命令执行顺序
分号,多个命令用分号隔开,最后一个回车后,命令按顺序执行
&& 连接连个命令,第一个命令执行成功后才能执行第二个命令
|| 连接连个命令,第一个命令执行失败后才能执行第二个命令
5,shell通配符
? 表示任意单个字符
* 表示任意长度字符
[ ] 表示匹配[ ]给定字符集合的任意一个字符
{ } 表示将{ }中的字符串,以及前导和后继字符作为匹配条件
6,单引号,双引号,反引号
单引号 括起来的字符都会变成普通字符串
双引号 括起来的字符除 $ " ` \ 外都会变成普通字符串
反引号 括起来的字符串会被作为命令执行
declare [-afirx] 声明变量类型
-a 定义为数组
-f 定义为函数
-i 定义为整数
-r 定义为只读
-x 定义为通过环境输出比变量
declare -i plaus=1+2+4*4-5
echo plaus
test命令(如果不想使用tset可以使用“[ 表达式 ]”来代替,表达式前后有空格)
test -e file 测试文件是否存在,存在为真
test -d file 测试文件是否存在且是目录,是则为真
test -x file 测试文件是否存在且可以执行,是则为真
test -r file 测试文件是否存在且为只读,是则为真
test -w file 测试文件是否存在且可写入,是则为真
test -b file 测试文件是否存在且为块设备,是则为真
test -c file 测试文件是否存在且为字符设备,是则为真
test -s file 测试文件是否存在且长度大于0,是则为真
test -f file 测试文件是否存在且是普通文件,是则为真
数值比较测试
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
字符串比较测试
-z s1 如果字符串s1的长度是0,值为真
-n s2 如果字符串s1的长度不为0,值为真
s1=s2 相等值为真
s1!=s2 不相等值为真
s1 如果字符串s1不是空串,值为真
控制结构
if then else fi
echo "press y to continue"
read yn
if [ "$yn"="y" ] || [ "$yn"="Y"]; then echo "script is running"
else
echo "Stop"
fi
case ......esac
echo "press you select "
read number
case $number in //如果没有read 交互式输入 ,直接输入使用$1 即 (case $1 in )
one) echo "you choice is one"
;;
tw0) echo "you choice is two"
;;
*) echo "Usage {one|two}"
exit 1
esac
for (( 条件1;条件2;条件3))
for var in var1 var2 var3
while[ 条件1 ] && { || } [ 条件2 ] 当条件符合时就继续
until [ 条件1 ] && { || } [ 条件2 ] 直到条件符合时才继续
函数
函数名() {
}
脚本调试
sh [-nvx] script.sh
-n 不执行脚本,查询脚本内容语法,错误则列出 sh -n script.sh
-v 执行脚本之前先把脚本内容显示在屏幕上
-x 将用到的脚本内容显示在屏幕上