tengo dos variables $a y $b
¿Hay un comando de script de Shell para asignar el valor de la variable mínima a $c?
es decir
$c = min($a,$b)y algún comando que puede funcionar en todas las plataformas hp-ux,aix,linux_x_64
gracias de antemano
EDITAR: el shell predeterminado es ksh
y debajo del script que estoy tratando de ejecutar
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.logignore las partes de sqlplus ya que funcionan bien, el único problema es que $safe_var necesita el mínimo de los dos valores
No hay ninguna función, pero puedes crearla:
(( $a <= $b )) && echo "$a" || echo "$b" La condition && action1 || action2 evalúa la condición. Si es cierto, realice action1 ; de lo contrario, realice action2 .
Para almacenar el resultado en una variable, haz lo siguiente:
min=$( (( $a <= $b )) && echo "$a" || echo "$b" ) Parece que la sintaxis $( (( )) ) está dando problemas. Por lo tanto, vamos a reemplazarlo por:
[ $a -le $b ] && echo "$a" || echo "$b"o asignando valor:
min=$([ $a -le $b ] && echo "$a" || echo "$b") $ 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" 3También podrías hacerlo de esta manera:
x=1 y=2 echo $(($x<$y?$x:$y)) 1Para almacenar valor en otra variable:
z=$(($x<$y?$x:$y)) #Min z=$(($x<=$y?$x:$y)) #Min and equal z=$(($x>$y?$x:$y)) #Greater z=$(($x>=$y?$x:$y)) #Greater and equalEn ksh, esto funciona bien
$ near_dr=5 DR=10 $ save_var=$(( near_dr < DR ? near_dr : DR )) ; echo $save_var 5 $ near_dr=15 DR=10 $ save_var=$(( near_dr < DR ? near_dr : DR )) ; echo $save_var 10 $ near_dr=15 DR=15 $ save_var=$(( near_dr < DR ? near_dr : DR )) ; echo $save_var 15Entonces puedes escribir una función:
min() { echo $(( $1 < $2 ? $1 : $2 )) } safe_var=$(min $near_dr $DR)Esto es lo mismo que la respuesta de @Liaraz, excepto que "Se puede hacer referencia a las variables por nombre dentro de una expresión aritmética sin usar la sintaxis de expansión de parámetros". (página man de ksh, sección Evaluación aritmética)