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=3217.关于历史命令的调用
!! 前一条命令; !: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 = '$b10.给多个变量循环赋值
#!/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 $var311. 用shell控制mysql
mysql -uroot -D 'DATABASENAME' -e 'select * from TABLE'