我最近不得不放弃我的Perl和shell脚本技能来帮助一些同事.有问题的同事的任务是从内部应用程序提供一些带有大型Oracle数据库后端的报告,他们根本没有这方面的技能.虽然有些人可能会质疑我是否具备这些技能(咧嘴笑),显然有足够的人认为我的意思是我无法摆脱它.
所以对我的问题 - 为了从数据库中提取报告,我的脚本显然必须连接并运行查询.到目前为止,我还没有设法找到一个很好的解决方案,用于存储数据库的用户名和密码,因此它目前在脚本中以明文形式存储.
对于其他人已经编写过的,有没有一个很好的解决方案,可能作为CPAN模块?或者还有其他更好的事情 - 比如将用户/密码组合保存在一个完全独立的文件中,该文件隐藏在文件系统的其他位置?或者我应该对它们进行简单的加密,以避免它们被系统范围的grep从我的脚本中拉出来?
编辑:Oracle数据库位于HP-UX服务器上.
应用程序服务器(运行shell脚本)是Solaris.
将脚本设置为仅由我拥有是不行的,它们必须由多个支持人员可以访问的服务帐户拥有.
这些脚本旨在作为cron作业运行.
我喜欢使用公钥验证,但我不知道如何使用Oracle的方法 - 如果有这样的方法 - 启发我!
我在Solaris上使用KornShell(ksh),目前我的PS1 env var是:
PS1="${HOSTNAME}:\${PWD} \$ "
并显示提示: hostname:/full/path/to/current/directory $
但是,我希望它显示: hostname:directory $
换句话说,我怎么能只显示主机名和当前目录,即名称tmp或~或public_html等等等等?
test -L filename和test -h filenameksh shell 之间有什么区别.从手册页中,两者都用于标识符号链接,但我想知道确切的区别.
以下是手册页中的说明.
-h file True if file exists and is a sym-
bolic link.
-L file True if file exists and is a sym-
bolic link.
Run Code Online (Sandbox Code Playgroud) 有没有办法通过单独知道名称来停止使用shell脚本运行的java程序.我正在使用ksh shell
使用scp定期将文件从1个unix服务器复制到另一个服务器并执行某些操作.要快速执行此操作,我希望使用一个unix脚本来执行scp并输入完成scp所需的密码.
我已经尝试了expect命令通过unix命令行发送密码,但到目前为止无法实现这一点.
示例命令
scp ./abc.txt hostname/abc.txt
expect "*password:*"
send "mypassword\r"
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
couldn't read file "password: ": no such file or directory
myscript.sh[5]: send: not found [No such file or directory]
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
好的,我确信这很简单,但它让我疯了.我最近去了一个程序,我不得不退后一点并使用Redhat 9.当我在运行KornShell(ksh)的标准xterm的命令行上输入时,我到达了结束时屏幕右侧滑动(切断命令的左侧),而不是将文本环绕到新行.这让我很难,因为我无法直接从命令行复制和粘贴上一个命令.我必须查看历史记录并从那里粘贴命令.如果你想知道,我做了很多命令行awk脚本,导致行很长.
有没有办法强制命令行换行而不是将可见性转移到我正在键入的命令的右侧?
我通过手册页选项没有运气.
我在跑:
谢谢.
我试图检查变量是否正好是两个数字,但我似乎无法弄明白.
你如何在KornShell(ksh)中检查正则表达式(正则表达式)?
我试过了:
if [[ $month =~ "[0-9]{2}" ]]
if [[ $month = _[0-9]{2}_ ]]
Run Code Online (Sandbox Code Playgroud)
我无法在其上找到任何文档.
任何见解?
目标:使用HTML正文和二进制附件发送邮件(使用sendmail).
遵循以下链接中指定的准则
http://www.unix.com/shell-programming-scripting/159522-sendmail-html-body-attachment-2.html
http://www.unix.com/shell-programming-scripting/58448-sendmail-attachment.html
它的工作范围是HTML主体或带有uuencode的二进制附件,但不是两者兼而有之.
下面给出了sendmail的shell脚本片段.有了这个,HTML正文变得很好,但附件被错误编码/解码,无法查看相同.
请指教.
#!/usr/bin/ksh
export MAILFROM="noreply@site.dom"
export MAILTO="somebody@somesite.com"
export SUBJECT="Test PDF for Email"
export BODY="email_body.htm"
export ATTACH="file.pdf"
export MAILPART=`uuidgen` ## Generates Unique ID
(
echo "From: $MAILFROM"
echo "To: $MAILTO"
echo "Subject: $SUBJECT"
echo "MIME-Version: 1.0"
echo "Content-Type: multipart/mixed; boundary=\"-$MAILPART\""
echo "---$MAILPART"
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
cat $BODY
echo "---$MAILPART"
echo 'Content-Type: application/pdf; name="'$(basename $ATTACH)'"'
echo "Content-Transfer-Encoding: base64"
echo 'Content-Disposition: attachment; filename="'$(basename $ATTACH)'"'
uuencode -m $ATTACH $(basename $ATTACH)
echo "---$MAILPART--"
) | /usr/sbin/sendmail $MAILTO …Run Code Online (Sandbox Code Playgroud) Android在线文档Android Debug Bridge说"Adb提供了一个灰壳".果然,如果我adb shell去AVD模拟器,我会得到灰烬,这基本上是一个简化的Bourne shell.
但是,如果我连接到几个远程设备,一个是HTC电话,另一个是华硕Transformer Prime平板电脑,它们都有一个版本的Korn shell,它提供:KSH_VERSION='@(#)MIRBSD KSH R39 2010/08/24'.虽然MIRBSD KSH不是一款成熟的AT&T Korn外壳,但它仍然比灰烬强大得多.
模拟器正在运行Jelly Bean,两个设备都在使用ICS.再做一点挖掘,看起来像是在姜饼中的灰烬,而在Honeycomb中则是mirbsd ksh.
那么,有人可以确认Android在线文档是错误的,并且模拟器运行的是过时的shell吗?还是供应商正在实施自己的?
我编写了一个示例KornShell函数来拆分String,将它放在一个数组中,然后打印出值.代码如下
#!/usr/bin/ksh
splitString() {
string="abc@hotmail.com;xyz@gmail.com;uvw@yahoo.com"
oIFS="$IFS";
IFS=';'
set -A str $string
IFS="$oIFS"
}
splitString
echo "strings count = ${#str[@]}"
echo "first : ${str[0]}";
echo "second: ${str[1]}";
echo "third : ${str[2]}";
Run Code Online (Sandbox Code Playgroud)
现在echo不打印出数组的值,所以我假设它与定义的数组的范围有关.
我是Shell脚本的新手,有人可以帮助我理解上面例子中的变量范围吗?