Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

so:shell_constructs:solutions

Zadanie 1

echo -e "echo hello world\ndate" > plik
sh plik

Zadanie 2

echo 'readlink /proc/$$/exe' > plik
chmod +x plik
./plik
csh
./plik

Zadanie 4

hello_world.sh
#!/bin/sh
echo hello world

Zadanie 5

arg_2_4.sh
#!/bin/sh
echo "Drugi argument: $2"
echo "Czwarty argument: $4"

Zadanie 6

name_pid_argc_argv.sh
#!/bin/sh
echo "\$0: $0"
echo "\$\$: $$"
echo "\$#: $#"
echo "\$@: $@"

Zadanie 8

scriptDir.sh
#!/bin/sh
SCRIPTDIR="$(readlink -f "$0")"
SCRIPTDIR="${SCRIPTDIR%/*}"
echo "$SCRIPTDIR"

lub

scriptDir.sh
#!/bin/sh
echo "$(dirname $(readlink -e $0))"

Zadanie 9

remove_plik.sh
#!/bin/sh
if rm plik
then
  echo udało się
else
  echo nie udało się
fi

Zadanie 10

remove_arg1.sh
#!/bin/sh
if rm "$1"
then
  echo udało się
else
  echo nie udało się
fi

Zadanie 11

check_ar_lt_a2.sh
#!/bin/sh
if [ $# -ne 2 ]
then
  echo skrypt nie ma dwóch argumentów
  exit
fi
if [ "$1" -lt "$2" ]
then
  echo argumenty są w porządku
else
  echo pierwszy argument nie jest mniejszy niż drugi
  exit
fi

Zadanie 12

check_writeable_file.sh
#!/bin/sh
if [ -f "$1" -a -w "$1" ]
then
  date >> "$1"
else
  echo "błąd: $1 nie jest zwykłym plikiem lub nie ma praw do zapisów"
  exit
fi

Zadanie 13

is_a_sh_script.sh
#!/bin/sh
if [ -f "$1" -a -x "$1" ]
then
  FIRSTLINE="$(head -n1 "$1")"
  if [ "$FIRSTLINE" = "#!/bin/sh" ]
  then
    echo "$1 jest wykonywalnym skryptem powłoki"
  fi
fi

Zadanie 14

turn_into_a_script.sh
#!/bin/sh
 
if [ ! -f "$1" ]
then
  echo "'$1' nie istnieje lub nie jest zwykłym plikiem"
  exit
fi
 
if [ ! -x "$1" ]
then
  chmod +x "$1"
fi
 
FIRSTLINE="$(head -n1 "$1")"
if [ "$FIRSTLINE" != "#!/bin/sh" ]
then
  TEMPFILE="$(mktemp -p. || mktemp)"
  echo '#!/bin/sh' > "$TEMPFILE"
  cat "$1" >> "$TEMPFILE"
  chmod --reference="$1" "$TEMPFILE"
  touch --reference="$1" "$TEMPFILE"
  mv "$TEMPFILE" "$1"
fi

Zadanie 15

display_ext_dependant.sh
#!/bin/sh
case "${1##*.}" in
  pdf) pdftotext "$1" -;;
  zip) unzip -l "$1";;
  *)   cat "$1";;
esac

Zadanie 16

name_first_last_line.sh
#!/bin/sh
for VAR in "$@" # 'in "$@"' można pominąć, bo "$@" jest domyślną listą argumentów dla for
do
  echo "=== $VAR ==="
  head -n1 "$VAR"
  tail -n1 "$VAR"
done

Zadanie 17

powers_exponent.sh
#!/bin/sh
for POW in $(seq ${1:-20})
do
  echo "2**$POW=$((2**POW))"
done

Zadanie 18

powers_limit.sh
#!/bin/sh
E=1
V=2
while ((V<${1:-10000}))
do
  echo "2**$E=$V"
  V=$((V*2))
  E=$((E+1))
done

Zadanie 19

next_logfile.sh
#!/bin/sh
NUM=0
while [ -e myProg_$NUM.log ]
do
  NUM=$((NUM+1))
done
LOG=myProg_$NUM.log
date > $LOG

Zadanie 20

append_log_ts.sh
#!/bin/sh
read LINE
echo "$(date): $LINE" >> log

Zadanie 21

min.sh
#!/bin/sh
read MIN
while read NUM
do
  [ -z "$NUM" ] && break
  [ "$NUM" -lt "$MIN" ] && MIN="$NUM"
done
echo $MIN

Zadanie 22

go_through_rotates.sh
#!/bin/bash
select FILE in /etc/logrotate.d/*
do
  [[ $REPLY = q ]] && break
  [[ $FILE ]] || continue
  echo "===$FILE==="
  cat "$FILE"
done
so/shell_constructs/solutions.txt · ostatnio zmienione: 2023/05/21 22:45 przez jkonczak