shell编程
1.
$0
脚本名称
$$
当前脚本进程
2.
kill -0 pid 用来检查一个进程是否存在,存在返回0;不存在返回1
3.
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
4. 后台启动
./test.sh & 终端关闭,进程结束。 nohup ./test.sh & 退出shell终端不会中断脚本
5. shell操作数据库
#删除此时间之前的数据库或表 DB_CONNECTOR="-h 10.10.10.10 -P 3306 -u user -p123123" DB_CMD="mysql $DB_CONNECTOR" FILENAME=database.txt cat $FILENAME | while read basename do $DB_CMD -e "use ${basename};show tables;" >> rt_check_table.txt flag=0; cat rt_check_table.txt | while read tablename do if [ $flag -ne 0 ];then echo "DROP TABLE IF EXISTS ${basename}.${tablename};SELECT sleep(2);" >> rt_check_delete.sql fi let flag++
#$DB_CMD-e "$sql" | tail -n +2 > "result.txt" #表示取第二行以后的结果 done rm -rf rt_check_table.txt done
6. 常用命令
tail -n +2 file.log #第二行(包含)以后的数据。
read user_id state < $FILE_TEMP #读取FILE_TEMP文件中的2列数据,分别赋值给两个变量。
pid=`ps -ef | grep supervise.payserverquery | grep -v grep | awk '{print $2}'` #获取进程中的pid
killall -SIGHUP 3009 重新载入配置,重启而不是杀死进程
7. shell数组
list=("xiaoming" "qiang" "wei") people=${list[1]} #qiang
8. while循环实现守护进程功能
app_name=$1 #app_name启动文件路径 while [ 1 ]; do app_base_name=`basename $app_name` #去掉前面路径后的进程名 pid=`/bin/ps --noheaders -o pid -C $app_base_name` if [ "$pid" == "" ]; then #如果进程为空,启动后台启动进程 /usr/bin/nohup $app_name &>/dev/null & wait $child_pid #阻塞 fi sleep 1 done
9.