如何在linux中找到两个变量的最小值

use*_*568 3 linux shell ksh

我有两个变量 $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 ] && echo "$near_dr" || echo "$DR")
echo $safe_var;
ulimit=`expr $safe_var - 30`;
llimit=`expr $ulimit - 1000`;
echo $llimit;
echo $ulimit;
i=$llimit
while [ $i -le $ulimit ];
do
  ls  evdprd_1_${i}_*.arc>>abc.log;
  let i=i+1;
done;




recover -s ttlhydnwr -c tphtpsd2<<EOF  >> abc.log
ls -1 *.arc
exit
EOF
sed -e 's/[\t ]//g;/^$/d' abc.log > abc1.log
awk '++seen[$0] == 2' abc1.log > actual.log
Run Code Online (Sandbox Code Playgroud)

请忽略 sqlplus 部分,因为它们工作正常,唯一的问题是 $safe_var 需要两个值中的最小值

fed*_*qui 8

没有函数,但你可以创建它:

(( $a <= $b )) && echo "$a" || echo "$b"
Run Code Online (Sandbox Code Playgroud)

condition && action1 || action2做评估条件。如果为真,则执行action1;否则,执行action2

要将结果存储到变量中,请执行以下操作:

min=$( (( $a <= $b )) && echo "$a" || echo "$b" )
Run Code Online (Sandbox Code Playgroud)

更新

$( (( )) )语法似乎有问题。因此,让我们将其替换为:

[ $a -le $b ] && echo "$a" || echo "$b"
Run Code Online (Sandbox Code Playgroud)

或赋值:

min=$([ $a -le $b ] && echo "$a" || echo "$b")
Run Code Online (Sandbox Code Playgroud)

样本

$ a=3
$ b=4
$ [ $a -le $b ] && echo "$a" || echo "$b"
3

$ b=1
$ [ $a -le $b ] && echo "$a" || echo "$b"
1

$ b=3
$ [ $a -le $b ] && echo "$a" || echo "$b"
3
Run Code Online (Sandbox Code Playgroud)