shell语法细节总结如下:
1. awk使用shell变量, 需要用双引号和单引号括起来"'$xxx'"
2. read和管道不能共存。管道前的数据也被当作标准输入,下面语句的read读到的是管道的数据:
for xxx in `yyyy|zzzz`
do
read input
done
3. read按行读文件会自动丢失文件中制表符和行首空格。 read -r可保留制表符。
4. if的-z,-n判断需要带双引号
if [ -n "$possable_name" ]
5. 赋值语句“=”前后不能有空格,否则会被shell当作命令去执行
6. echo 一个shell变量,最好带双引号,否则shell会忽略变量里的空格和制表符
杀死所有sleep
#!/bin/sh
# desc, ip, port, user, pwd
src="db_list.txt"
cat $src|grep -v '^$'|awk '{printf("[%s]%s\n", NR, $0)}'
echo "Enter db number:"
read number
host=`cat $src|awk '{if(NR=="'$number'") print $2}'`
port=`cat $src|awk '{if(NR=="'$number'") print $3}'`
user=`cat $src|awk '{if(NR=="'$number'") print $4}'`
passwd=`cat $src|awk '{if(NR=="'$number'") print $5}'`
mysqladmin processlist -u"$user" -p"$passwd" -h"$host" -P"$port" | grep -i sleep | awk '{print $2}'|xargs -n 1 mysqladmin -u$user -p$passwd -h$host -P$port kill