标签: ksh

我想将数字之和除以一个值

这是我的 Unix shell 脚本代码

#! /bin/ksh

echo "Enter your first number:"    
read first

echo "Enter your second number:"    
read second

echo "Enter your third number:"    
read third

SUM=`expr $first + $second + $third`    
AVERAGE="$SUM/3"

echo "The average is $AVERAGE"
Run Code Online (Sandbox Code Playgroud)

基本上我想找到用户输入的 3 个值的平均值。输入所有值后得到的结果,例如所有值加起来为 12;是“平均值是12/3”。

shell scripting ksh

2
推荐指数
1
解决办法
5712
查看次数

将大写变量分配给命令

在尝试破译我现在公司的前雇员编写的一些脚本时,在许多脚本中,我遇到了以下语句,这些语句将变量分配给一些命令,如下所示:

CAT=cat
GREP=grep
SED=sed
Run Code Online (Sandbox Code Playgroud)

在脚本的后面,我看到他们使用了这些变量而不是常规命令:

$GREP -v "^#" `dirname $0`/abcdfilename | while read line
do
<some loop operations>
done
Run Code Online (Sandbox Code Playgroud)

我没有看到使用这个变量而不是grep直接使用的意义。我的问题是:

  • 以这种方式执行 grep 或 sed(在我们的例子中)是否有意义?
  • 这是某人试图编写脚本的结果,目的是让其他人更难理解吗?
  • 或者这只是一个错误脚本的例子?

ksh variable-substitution

2
推荐指数
1
解决办法
175
查看次数

如何使 ksh 表现得好像它已作为登录 shell (AIX) 调用一样?

当我运行该ksh命令时,它作为非登录 Shell 运行(如预期的那样)。我想要实现的是ksh作为登录 Shell运行,就像使用bash.

作为参考,bash可以通过指定-l选项,将其视为已作为登录 shell 调用。这是 bash 手册页的摘录:

BASH(1)                                                       BASH(1)

NAME
    bash - GNU Bourne-Again SHell

. . .

OPTIONS

     . . .

     -l        Make bash act as if it had been invoked as a login shell (see INVOCATION below).
Run Code Online (Sandbox Code Playgroud)

这是我在 AIX 服务器中看到的手册页的链接:

http://www.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds3/ksh.htm

有一个选项可以禁用$HOME/.profile文件处理(请参阅下面的引用),因此必须有一种方法可以将 KornShell 用作登录 shell。

ksh Command

Purpose
    Invokes the Korn shell.

. . .

Flags

     . . .

     -p        
          Disables the processing of …
Run Code Online (Sandbox Code Playgroud)

shell login ksh

2
推荐指数
1
解决办法
1568
查看次数

如何扩展包含变量的数组元素?

我有一个数组,其中每个元素都可能包含另一个变量。数组分配来自文件,如下所示:

FILE_CLEANUP_DIR_ARR=($(cat cleanup.list | sed '/^[[:blank:]]*$/d' | sed '/^[#]/d'))
Run Code Online (Sandbox Code Playgroud)

如何使用扩展变量恢复数组。

TARGET_DIR=/SOMEROOTDIR

FILE_CLEANUP_DIR_ARR[0]从字面上看具有价值$TARGET_DIR/SOMESUBDIR0

FILE_CLEANUP_DIR_ARR[1]从字面上看具有价值$TARGET_DIR/SOMESUBDIR1

如何将此 FILE_CLEANUP_DIR_ARR 恢复为扩展变量,如下所示。

FILE_CLEANUP_DIR_ARR[0] = /SOMEROOTDIR/SOMESUBDIR0

FILE_CLEANUP_DIR_ARR[1] = /SOMEROOTDIR/SOMESUBDIR1

示例代码。不工作。

i=0
for CDIR in "${FILE_CLEANUP_DIR_ARR[@]}";
do
FILE_CLEANUP_DIR_ARR[i]="$CDIR"
((i++))
done
Run Code Online (Sandbox Code Playgroud)

linux shell bash ksh

2
推荐指数
1
解决办法
277
查看次数

如何为sendmail功能添加主题

我在 ksh 中有以下行代码:

echo -e "$SUBJECT"|/usr/sbin/sendmail -f XXXXXX@gmail.com -t XXXXXX@gmail.com
Run Code Online (Sandbox Code Playgroud)

但我仍然$SUBJECT在身体里,而不是真正的主题。它出什么问题了?

ksh sendmail

2
推荐指数
1
解决办法
5359
查看次数

如何将脚本的所有输出重定向到文件并替换密码?

我正在 AIX 7.2 上运行 ksh 脚本。

在调试模式下,我想将所有脚本执行的操作重定向到 brkpt 文件。
该脚本还登录另一个应用程序,因此使用密码(假设“pw123_”)

 exec > $brkpt_file 2>&1
 set -xv
 dsmadmc -id=admin -pa=pw123_ q pr
Run Code Online (Sandbox Code Playgroud)

重定向工作正常,但我想用“***”替换密码字符串,以便它在 brkpt 文件中永远不可见。

这在命令行上工作得很好:

 echo "dsmadmc -id=admin -pa=pw123_ q pr" | sed "s/-pa=[[:graph:]]* /-pa=*** /g"
result
 dsmadmc -id=admin -pa=*** q pr
Run Code Online (Sandbox Code Playgroud)

但是一旦我将这个“sed”与“exec”结合使用:
a)输出不再重定向到文件,而是在屏幕上
b)密码字符串不会被替换

 exec | sed 's/-pa.*=[[:graph:]]* /pa=*** /g' > $brkpt_file 2>&1
 set-xv
 dsmadmc -id=admin -pa=pw123_ q pr
result
 + dsmadmc -id=admin -pa=pw123_ q pr
 + ... other stuff of script
 
Run Code Online (Sandbox Code Playgroud)

如何获取 brkpt 中的所有脚本内容并隐藏密码?

password ksh sed exec

2
推荐指数
1
解决办法
351
查看次数

将制表符放在 AIX/ksh 上的每个输出行之前

0:root@SERVER:/root # echo "something" | sed -e 's/^/\t/g'
tsomething
0:root@SERVER:/root # 
Run Code Online (Sandbox Code Playgroud)

AIX/ksh .. 为什么它不起作用?我只想在每一行之前放一个“标签”!

ksh sed aix

1
推荐指数
1
解决办法
3448
查看次数

awk BEGIN 中的 $2(字段参考)不起作用

在以下代码段中,$2awk 返回空。我究竟做错了什么?我试图找到 MAX 和 MIN 之间的区别。

#!/bin/ksh
if [ $# -ne 1 ]; then
        echo "Usage: sh `basename ${0}` filename";
        exit 1;
fi
if [ ! -s ${1} ]; then
        echo "file doesn't exist or is empty";
        exit 1;
fi
sed -e '/^$/d' -e '/^#/d' ${1} |
awk  -F'=' '
        BEGIN {
                MIN=$2; MAX=$2; print MIN;
        }
        {
                if ( $2 > MAX )
                {
                        MAX = $2;
                }
                else if ( $2 < MIN )
                {
                        MIN …
Run Code Online (Sandbox Code Playgroud)

shell scripting ksh awk

1
推荐指数
1
解决办法
847
查看次数

Crontab 三重重定向

我对重定向有一个非常基本的了解,但是我遇到了一个带有我不理解的重定向的 cronjob。

00 19 * * 1-5 /apps/app/scripts/doit.sh a np cron > /apps/app/scripts/doit.log > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

我看到三个重定向。我打算在这里写下我的最佳猜测,但我无法形成全貌。如果有人帮助我理解 STDOUT 和 STDERR 术语,我将不胜感激。

我的外壳是 ksh:

:> ps -p $$
  PID TTY          TIME CMD
23947 pts/0    00:00:00 ksh
Run Code Online (Sandbox Code Playgroud)

shell ksh io-redirection

1
推荐指数
1
解决办法
234
查看次数

在 ksh 中是否有相当于 bash 的“nocaseglob”?

我想做 如何将不区分大小写的模式与 ls 匹配?

除了 ksh。是否有可能在没有任何痛苦的情况下做到这一点(正则表达式)?

ksh wildcards

1
推荐指数
1
解决办法
607
查看次数