系统运维过程中,经常遇到向FTP上传下载数据,向DB读写数据等场景。FTP,SQLPLUS,MYSQL提供的都是交互式命令方式,在shell下也通过管道方式实现自动执行。
1. FTP
1.1 -s参数指定文件名
vi ftpcmd.txt open 192.168.5.10 myuser mypass get 1.txt bye ftp -s:tpcmd.txt // -s直接指定命令文件,可以完成自动测试,一般用于暴力破解FTP密码
1.2 "<<EOF" 表示后续输入作为子命令或子shell的输入,直到遇到EOF,常用于交互式命令中的自动输入。也可用于shell的多行注释。
ftp -n <<! open 192.168.5.10 user myuser mypass binary cd ${Destdir} get $File close bye !
2. DB
#Oracle sqlplus ${DbUser}/${DbPass}@${DbServ}:1521/${DbId} <<EOF insert into TEST values(1,'hello'); commit; EOF #MYSQL mysql -u root -p123456 -e "select count(*) from products"; #-e指定sql
3. redis
redis是非常流行的非关系型数据库,可通过下列方式执行批量的命令
cat data.txt | redis-cli -a 123456
cat读取data.ini 作为管道输入,data.ini 格式为一条命令一行
cat data.txt | redis-cli -a 123456 --pipe
pipe指定用管道方式执行命令,这样可以提高执行效率。但此时的 data.ini 必须是dos格式的,每行以“\r\n“换行符结尾