› Foros › PC › Software libre
#! /bin/bash
if(($#<1)); then
echo "Uso: $0 [ -d carpeta ] archivo [...]"
exit 0
fi
if [ -z $1 ]; then
echo "El parametro especificado esta vacio"
exit 1
fi
if [ $1 != '-d' ]; then # si no ha escrito -d
for((x = 0; x < $#; x++))
do
if [ -a $1 ]; then # compruebo si existe el archivo
if [ -r $1 ]; then # compruebo si tiene acceso de lectura
echo "Tienes permisos de lectura en el archivo $1"
shift
else
echo "No tienes permisos de lectura en el archivo $1"
shift
fi
else
echo "El archivo $1 no existe"
shift
fi
done
else
for((x = 0; x < $#; x++))
for((x = $#; x > 0; x--))
#! /bin/bash
if(($#<1)); then
echo "Uso: $0 [ -d carpeta ] archivo [...]"
exit 0
fi
if [ -z $1 ]; then
echo "El parametro especificado esta vacio"
exit 1
fi
if ! [ $1 == '-d' ]; then # si no ha escrito -d
for((x = $#; x > 0; x--))
do
if [ -a $1 ]; then # compruebo si existe el archivo
if [ -r $1 ]; then # compruebo si tiene acceso de lectura
echo "Tienes permisos de lectura en el archivo $1"
shift
else
echo "No tienes permisos de lectura en el archivo $1"
shift
fi
else
echo "El archivo $1 no existe"
shift
fi
done
else
if [ -z $2 ]; then # si el directorio no ha sido introducido
echo "El parametro de carpeta esta vacio"
exit 5
fi
if ! [ -d $2 ]; then # si el directorio no existe
echo "El directorio $2 no existe"
exit 6
else # si el directorio existe
if [ -z $3 ]; then # si el archivo a buscar en ese directorio no ha sido introducido
echo "El parametro de archivo esta vacio"
exit 7
fi
carpeta=$2 # guardo la ruta en una variable para que despues de usar shift no la pierda
for((x=$#; x > 2; x--)) # for para que recorre todos los parametros (sin llegar a -d ncarpeta)
do
if [ -a $carpeta/$3 ]; then # si el archivo existe
if [ -r $carpeta/$3 ]; then # si tienes permisos de lectura
echo "Tienes permisos de lectura en el archivo $carpeta/$3"
shift
else # si no tienes permisos de lectura
echo "No tienes permisos de lectura en el archivo $carpeta/$3"
shift
fi
else # si no existe
echo "El archivo $carpeta/$3 no existe"
shift
fi
done # fin del for
fi
fi
#! /bin/bash
if [ $# -lt 1 ]; then
echo "Uso: $0 [ -d carpeta ] archivo [...]"
exit 0
fi
if [ -z $1 ]; then
echo "El parametro especificado esta vacio"
exit 1
fi
if [ $1 != '-d' ]; then # si no ha escrito -d
for x in $#
do
if [ -a $1 ]; then # compruebo si existe el archivo
if [ -r $1 ]; then # compruebo si tiene acceso de lectura
echo "Tienes permisos de lectura en el archivo $1"
shift
else
echo "No tienes permisos de lectura en el archivo $1"
shift
fi
else
echo "El archivo $1 no existe"
shift
fi
done
else
e-Minguez escribió:Hum... un par de cosillas:#! /bin/bash
if [ $# -lt 1 ]; then
echo "Uso: $0 [ -d carpeta ] archivo [...]"
exit 0
fi
if [ -z $1 ]; then
echo "El parametro especificado esta vacio"
exit 1
fi
if [ $1 != '-d' ]; then # si no ha escrito -d
for x in $#
do
if [ -a $1 ]; then # compruebo si existe el archivo
if [ -r $1 ]; then # compruebo si tiene acceso de lectura
echo "Tienes permisos de lectura en el archivo $1"
shift
else
echo "No tienes permisos de lectura en el archivo $1"
shift
fi
else
echo "El archivo $1 no existe"
shift
fi
done
else
Es algo más optimo, porque cada vez que ejecutas algo entre parentesis, se crea una subshell, y usando [ (test) es más rapido
Además es mas "bash like"
Saludos!
e-Minguez escribió:Bash expande $# a sus valores, y la variable x va tomando esos valores:
P.ej:
./comando arg1 arg2 arg3
for i in $# => for i in arg1 arg2 arg3
En la primera vuelta, i=arg1.
En la segunda, i=arg2,...
Saludos! ;D
PD.- Usa la busqueda, y hay una charla que dio Ferdy de bash, que es muy interesante![]()