1.清空文件内容(也有touch的功能)
:>data >data #注:这里不适用管道,符号链接,和某些特殊文件
2.检测命令行参数
case "$1" in
"" )
data=100;;
*[!0-9]*)
echo "Usage: `basename $0`";
exit 1;;
* )
data=$1;;
esac
3.在README的第一行加上#!/bin/more,让它具有可执行权限,结果是将文档自动列出自己的内容。
4.echo对于打印单行消息是非常好的,如果想打印消息块的话,可以用cat here document。
5.数制转换
echo $(( 2#101011 ))
6.匿名代码块中的变量,对于脚本其他部分的代码是可见的。
a=123
{
a=321
}
echo "a = $a" #a=321
7.关于历史命令的调用
!! 前一条命令;
!:0 不带参数的前一条命令名;
!^ 前一条命令的第一个参数;
!:n 前一条命令的第n个参数;
!$ 前一条命令的最后一个参数;
!* 前一条命令的所有参数,命令名除外;
!n 第n条命令;
!-n 倒数第n条命令;
!str 最近一条以str开头的命令;
!?str 最近一条包含str的命令;
^a^b 将上一条命令名中的a替换为b;
!:gs/a/b 将上一条命令的所有a替换为b(包含命令名和参数)。
8.关于${a:b:c}的用法
#!/bin/bash
a=/dir1/dir2/dir3/my.file.txt
echo ${a:0:3} #打印前三个字符
echo ${a:${#a}-3:3} #打印后三个字符
9.${a-b} (${a:-b})和${a=b} (${a:=b})的区别
啥都不说了,看执行结果什么都明白了
#!/bin/bash
b=
echo '${b-acefei} = '${b-acefei}
echo '${b:-acefei} = '${b:-acefei}
echo '$b = '$b
b=
echo '${b=acefei} = '${b=acefei}
echo '${b:=acefei} = '${b:=acefei}
echo '$b = '$b
10.给多个变量循环赋值
#!/bin/bash
var=(var1 var2 var3)
char="a b c"
i=0
for loop in $(echo $char)
do
eval "${var[i]}=$loop"
((i++))
done
echo $var1
echo $var2
echo $var3
11. 用shell控制mysql
mysql -uroot -D 'DATABASENAME' -e 'select * from TABLE'