Ⅰ shell1脚本批处理导出数据到a文件到文件服务器shell2脚本通过中间件连接至文件服务器读取a文件数据
分成2段,第一段就是从数据库导出数据,生成文件a,把a放到某个机子上;用shell实现(如果是这样的话应该不难实现)
第二段,shell2脚本通过中间件连接至文件服务器读取a文件数据--这个就不懂了,shell2为何要通过中间件读取A文件。。是需要前端展示?是不是shell2启动中间件上的应用还是说这shell就是应用本身。
问题太不明确了,这么长一条线,模凌两可的一句话谁知道要怎么处理
Ⅱ 如何用shell脚本将txt文件中的数据:张三 李四 男 女 20 22, 输出为:张三 男 20 李四 女 22
1、思路
打印奇数行,将列变为行
打印偶数行,将列变为行
2、实例:
#!/bin/sh
cat a.txt|awk 'NR%2'|awk -vFS='\n' -vORS='' '$1=$1' >> b.txt
cat a.txt|awk '!(NR%2)'|awk -vFS='\n' -vORS='' '$1=$1' >> b.txt
more b.txt
Ⅲ 求助,shell 脚本批量数据的处理
没太听懂你的意思,如果用bash来写,可以通过数组来控制,比如
数组TraceNum[1] 和对应的PackNuo[1] 数组里边的下标可以用变量来控制。
不知道是不是你想要的效果,具体还是没听懂你想干嘛。
Ⅳ Shell脚本清除脏数据
假设原数据为file.txt,那么下面这条语句就可以做这个事情。
awk-F,'NF==5{print}NF!=5{getlinea;print$0""a}'file.txt
基于逗号分隔的字段数(此例为每行5个字段)来判断当前行是否完整。
不完整的话就读入下一行与当前行合并后输出。
目前仅处理只换了一行的情况。
实测结果如下:
你可以用输出重定向将结果保存到文件。
Ⅳ linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令
之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。
bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。
1、命令行参数
向shell脚本传递数据的最基本方式是使用命令行参数。
1)读取参数
读取输入的参数的变量为位置参数,位置参数通过标准数字表示,
其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。
shell脚本自动将命令行参数赋值给各个位置变量。
同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)
当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。
2)读取程序名称
传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。
使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。
3)测试脚本
当脚本认为应该包含参数,却实际上没有数据时,就会出错。
好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。
例子:if [ –n “$1” ] then .. else .. fi
2、特殊的参数变量
用于跟踪命令行参数
1)参数计数
使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可测试参数个数
可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)
2)获取所有数据
变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。
变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数
3、移位
shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)
在不清楚参数数目情况下,这是一个迭代参数的好办法。
可以为shift提供一个参数,来实现多位移变化。
4、处理选项
选项是由破折号引导的单个字母,用于更改命令的行为。
1,找出选项
1)处理简单选项
可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。
2)从参数中分离选项
同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。
3)处理带值的选项
选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:
2,使用getopt命令
getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析
1)命令格式
getopt可以接受任意形式的选项和参数列表,并自动将它们转换为适当的格式。
命令格式为: getopt options optstring parameters
选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。
2)脚本中使用getopt
需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。
需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`
但是getopt命令不能很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:
3)更高级的getopts命令
getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。
非常适宜于在循环中解析所有命令行参数
格式为: getopts optstring variable
$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。
注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。
好的特性:
1)可以在参数值中包含空格
2)选项字母和参数值中间可以没有空格
3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号
5、标准化选项
有一些字母选项具有标准含义。最好按照标准含义定义选项意义
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、获取用户输入
当需要在执行过程中获得执行脚本人员的输入,使用read命令
1)基本读取
read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。
-p 允许在read命令行中直接指定一个提示。
可以指定多个变量,也可以不指定将放置在reply环境变量中)
2)计时
使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。
使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入
3)默读
使用-s使输入不显示在终端例如输入密码)
4)读取文件
最常用的方法是使用cat命令,并通过管道传给包含read的while语句。
Ⅵ shell脚本中实现对oralce数据库的操作
试一下,我没环境,不能帮你测试,有问题联系
在表名的文件中,增加表结构说明,格式如下:
field1,field2,field3,.....,fieldn
load_data()
{
TABNAME=$1
DATAFILE=$2
crt_ctlfile $TABNAME $DATAFILE
sqlldr $username/$password control=loader.ctl
if [ $? -ne 0 ]
then
echo "error load $TABNAME!"
exit -1
fi
}
crt_ctlfile()
{
echo "load data" > loader.ctl
echo "infile '$2'" >> loader.ctl
echo "into table $1" >> loader.ctl
echo "fields terminated by \"|\" optionally enclosed by '\"'" >> loader.ctl
echo "(" >> loader.ctl
cat tablelist/$1 >> loader.ctl
echo ")" >> loader.ctl
}
if [ $# -ne 2 ]
then
echo "usage: $0 username password"
exit
fi
username=$1
password=$2
tabname=`ls tablelist`
for tab in $tabname
do
if [ -z tablelist/$tab ]
then
echo "file : $tab is null, you need to add table field!"
else
datafile=$tab.unl
if [ -s ./data/$datafile ]
then
load_data $tab $datafile
else
echo "file : $datafile is null or not exists"
fi
fi
done
Ⅶ shell脚本,对数据处理,求指导,用awk怎么实现
用下面这个命令来执行下就行了
#awk '{k=substr($0,1,5);m[k]+=1;if($0>=l[k]){l[k]=$0};if($0<=o[k] || !o[k]){o[k]=$0}}END{for(a in m) print a,"|",m[a],"|",l[a],"|",o[a]}' 1.txt
如果想定向到别的文件,直接用">"和">>"指向的文件就行了。
上面的完全由awk实现,应该完全满足你的需求吧?
Ⅷ [求IT大牛帮忙]shell脚本,操作数据库(informix数据库),求IT大牛帮忙
可能不是最佳,绕点弯子,不算高手
#! /bin/sh
dbaccess aadb 2>/dev/null << !SQL
unload to sql.txt DELIMITER " "
select * from info where date[1,4]=YEAR(CURRENT) and date[5,6]=MOUTH(CURRENT) and date[7,8]=DAY(CURRENT)
!SQL
if (wc -l sql.txt = 0);then
dbaccess aadb2>/dev/null <<!SQL
insert into info values("?","?")
!SQL
fi
Ⅸ linux shell脚本 批处理
新建一个文件,名字为test(自己定义的名字)
nano test.sh在里面编写脚本
程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中使用/bin/sh来执行程序。
(能写一些shell普通命令,命令用分号隔开)
例子:
#! /bin/bash
# shutdown pc
sudo
shutdown +1执行方法
(1)在控制台输入命令执行:
sh
test.sh
(2)先给脚本可执行权限,双击执行:
右键此文件,选择属性->权限,最下方会有一个“允许以程序执行文件”,将这一项勾选,就可以了。
或在命令行下附予权限:
chmod 777
test.sh 或: chmod +x test.sh
Ⅹ shell脚本5---信号处理
默认情况下,bash shell会忽略收到的任何SIGQUIT(3)和SIGTERM(15)信号(正因为这样交互式shell才不会被意外终止)。但是bash shell会处理收到的SIGHUP(1)和SIGINT(2)信号。
如果bash shell收到SIGHUP信号,它会退出。但在退出之前,它会将信号传给shell启动的所有进程(比如shell脚本)。通过SIGINT信号,可以中断shell,Linux内核停止将CPU的处理时间分配给shell,当这种情况发生时,shell会将SIGINT信号传给shell启动的所有进程。
在无条件终止作业时,开始不会得到任何反应。但下次有shell提示符时,你会看到一个消息说明作业已经被终止了。
方括号中的数字时shell分配的作业号。每当shell产生一个提示符时,它就会显示shell中已经改变状态的作业的状态。在你无条件终止一个作业后,下次强制shell生成一个提示符时,shell会产生一条消息,说明作业在运行时被无条件终止了。
trap命令允许你来指定shell脚本要watch哪些linux信号并从shell中拦截。如果脚本收到了trap命令中列出的信号,它会阻止它被shell处理,而在本地处理。
trap命令的格式:
signals多个信号用空格隔开。
以下例子用trap命令来捕捉SIGINT和SIGTERM信号
当我们执行Ctrl+C时,shell脚本不会中断。
要捕捉shell脚本的退出,只要在trap命令后加上EXIT信号就行。
执行这个脚本,在脚本执行完成退出前,会输出Goodbye。
参数列表
jobs输出中会有加号和减号。带加号的作业会被当作默认作业。在使用作业控制命令时,如果未在命令行指定任何作业号,该作业会被当作操作对象。带减号的作业则会在默认作业完成后成为下一个默认作业。任何时候只有一个带加号和一个带减号的作业。
在bash作业控制中,可以将已停止的作业作为前台或者后台进程重启。前台进程会接管当前的工作终端。
nice命令允许在执行一个命令是调整它的调度优先级。优先级是一个整数值。从-20(最高优先级)到20(最低优先级)。默认情况下,bash shell以优先级0启动所有进程。
renice可以改变已运行命令的优先级。
普通用户只能调整属于自己进程的优先级。并且只能降低优先级。
root可以调整任何进程的优先级到任意级别。
如何设置一个计划任务在每月的最后一天执行?