有没有办法从日期中减去一个月或在 unix 中至少减去 30 天。
例子:
[yyy-mm-dd] - 30 天
2011-07-23 - 30 天
顺便说一下,日期可以是任何日期,具体取决于用户输入。
谢谢。
我有两个变量 $a 和 $b
是否有 shell 脚本命令将最小变量的值分配给 $c
IE
$c = min($a,$b)
Run Code Online (Sandbox Code Playgroud)
以及一些可以在所有平台上运行的命令 hp-ux,aix,linux_x_64
提前致谢
编辑:默认外壳是 ksh
在我试图运行的脚本下方
rm abc.log
near_dr=`sqlplus -s tcs384160/tcs#1234 <<\EOF
set pagesize 0 feedback off verify off heading off echo off
select max(sequence#) from v$archived_log where applied='YES' and thread#=1 and
dest_id=2;
exit;
EOF`
DR=`sqlplus -s tcs384160/tcs#1234 <<\EOF
set pagesize 0 feedback off verify off heading off echo off
select max(sequence#) from v$archived_log where applied='YES' and thread#=1 and
dest_id=3;
exit;
EOF`
safe_var=$([ $near_dr -le $DR ] && …Run Code Online (Sandbox Code Playgroud) 我试图找到今天前 7 天的日期。
CURRENT_DT=`date +"%F %T"`
diff=$CURRENT_DT-7
echo $diff
Run Code Online (Sandbox Code Playgroud)
我正在尝试像上面这样的东西来找到比当前日期少 7 天的时间。有人可以帮我吗?
oracle中.pls和.sql文件之间的实际区别是什么。两者对不同类型的语句有什么限制?
我得到了一个 unix(korn 脚本)项目,它在不同的地方同时使用 .sql 和 .pls 文件。试图弄清楚应该在哪里使用哪个。
这里遇到一些麻烦。我想将 ls 命令的输出捕获到变量中。然后稍后使用该变量并计算其中的行数。我尝试了一些变化
这是可行的,但如果没有 .txt 文件,它会说计数为 1:
testVar=`ls -1 *.txt`
count=`wc -l <<< $testVar`
echo '$count'
Run Code Online (Sandbox Code Playgroud)
这适用于没有 .txt 文件的情况,但当存在 .txt 文件时,计数会少 1:
testVar=`ls -1 *.txt`
count=`printf '$testVar' | wc -l`
echo '$count'
Run Code Online (Sandbox Code Playgroud)
此变体还表明,当不存在 .txt 文件时,计数为 1:
testVar=`ls -1 *.txt`
count=`echo '$testVar' | wc -l`
echo '$count'
Run Code Online (Sandbox Code Playgroud)
编辑:我应该提到这是 korn shell。
我必须使用 ksh88 提取子字符串。(顺便说一句,找到 ksh 版本的简单方法$KSH_VERSION对我不起作用。我不得不使用
[ "`echo "\c" | grep c`" ] && echo ksh93 || echo ksh88
Run Code Online (Sandbox Code Playgroud)
我尝试使用命令echo ${stringvariable : 2: 2}但它说bad substitution。我是 Unix 世界的新手。这是我为得到结果所做的:
我已经使用 PUTTY 登录到 Unix 并输入了上面的命令。我也先尝试了 ksh 命令,然后是我的命令,但仍然没有成功。有什么我做错了吗?
另外,如果我想要从位置 2 开始直到结束的子字符串怎么做?
我必须修改现有的ksh脚本,该脚本使用'shift'查看命令行参数,因此清空$ @,但是现在想将原始参数传递给第二个脚本。
在主线情况下,我可以通过将$ @对应到变量并将其传递给第二个脚本来实现,但是我无法使它用于带引号的命令行参数。
如果我有一个名为“打印机”的脚本,如下所示:
#!/bin/ksh
INPUT=$@
echo "Printing args"
until [[ $# -eq 0 ]];do
echo $1
shift
done
./printer2 $INPUT
Run Code Online (Sandbox Code Playgroud)
和printer2如下所示:
#!/bin/ksh
echo "Printing second args"
until [[ $# -eq 0 ]];do
echo $1
shift
done
Run Code Online (Sandbox Code Playgroud)
我想要的输出
./printer first second "third forth"
Run Code Online (Sandbox Code Playgroud)
成为 :
Printing args
first
second
third forth
Printing second args
first
second
third forth
Run Code Online (Sandbox Code Playgroud)
我已经尝试过各种围绕变量的引号组合(在$ INPUT的赋值中,以及将其传递给printer2时),但无法弄清楚。有人可以帮忙吗?
我有一个在AIX ksh中运行的脚本,如下所示:
wc dir1/* dir2/* | {awk command to rearrange output} | {grep command to filter more} > dir2/output.txt
Run Code Online (Sandbox Code Playgroud)
这条线的前提条件是dir2/output.txt不存在.
问题是dir2/output.txt已经包含在输出中(它发生了数百次,没有问题).dir1和dir2是NFS安装的.
它与实现有关wc- 如果第一个参数需要很长时间怎么办?我想不是,因为我尝试了以下内容:
wc `sleep 5` *.txt > out.txt
Run Code Online (Sandbox Code Playgroud)
即使在这种情况下,out.txt也不会列出自己.
最后一点,在这个例子中使用了通配符,它们在实际脚本中使用.因此,如果首先发生扩展,为什么会出现这个问题呢?
dir2/output.txt实际创建的是什么时候?
我想删除$DIR_TO_CLEAN超过$DAYS_TO_SAVE几天的文件.简单:
find "$DIR_TO_CLEAN" -mtime +$DAYS_TO_SAVE -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
我想我们可以添加一个-type f或一个-f标志rm,但我真的想计算被删除的文件数量.
我们可以天真地做到这一点:
DELETE_COUNT=`find "$DIR_TO_CLEAN" -mtime +$DAYS_TO_SAVE | wc -l`
find "$DIR_TO_CLEAN" -mtime +$DAYS_TO_SAVE -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)
但是这个解决方案还有很多不足之处.除了命令重复之外,如果rm无法删除文件,此代码段会高估计数.
我与重定向体面舒适,管道(包括命名的),子shell, xargs,tee等,但我渴望学习新的技巧.我想要一个适用于bash和ksh的解决方案.
你如何计算删除的文件数量find?
我有以下代码片段:
#!/bin/ksh
source /users/some_user/.cshrc
Run Code Online (Sandbox Code Playgroud)
但是,运行它会产生source: not found错误.
我也试过使用dot像这样的运算符:
#!/bin/ksh
. /users/some_user/.cshrc
Run Code Online (Sandbox Code Playgroud)
但是,这也不能解决问题,尽管它不再给我source: not found错误.
获取.cshrc文件的正确方法是什么?