George Pashev

Website of George Pashev (Jidai Mirai)

Scientist, Programmer, Data Scientist, Enterpreneur

Упражненя по ОС - Серия Задачи 1: BASH

Задачи:

Да се напише bash shell script, който:

1) Приема име на файл и му добавя право за изпълнение. Ако няма такъв файл да изпише съобщение за грешка "No such file."

 

#!/bin/bash
if [ -e $1 ]; then
    chmod +x $1
else
  echo No such file $1.
fi

2) Приема от командния ред 2 числа, а ако не са подадени 2 числа като входни параметри, предлага на потребителя да ги въведе. Тези 2 числа са първите 2 числа на ред на Фибоначи, който скрипта трябва да генерира. Редът да е с размер 20 елемента. Генерираният ред да се запазва във файл: fib.txt.

#!/bin/bash

num_vh=$#
declare -i num1
declare -i num2
declare -a nums
#echo $num_vh
if [ $num_vh -le 1 ]; then
  echo "enter first number";
  read num1
  echo "enter second number";
  read num2
 else
 num1=$1
 num2=$2 
fi

nums[0]=$num1
nums[1]=$num2
echo "Fibonacci" > fib.txt
echo nums[0]=${nums[0]} >> fib.txt
echo nums[1]=${nums[1]} >> fib.txt
declare -i i=2
while [ $i -lt 20 ]; do
 
  nums[$i]=$(( ${nums[(( $i - 1 ))]} + ${nums[(( $i - 2 ))]} ))
  echo nums[$i]=${nums[$i]} >> fib.txt
  i=$i+1
 
done


3) Приема от командния ред цяло число и проверява дали е четно или не. Ако е четно, изписва "1", ако е нечетно "0".

#!/bin/bash
if [ $(( $1 % 2 )) -eq 0 ]; then
    echo "1"

else
  echo "0"

fi


4) Приема от командния ред променлив брой числа и връща сумата им.

#!/bin/bash
declare -i sum=0
for num in $@
do
sum=$(( $sum + $num ))
done
echo $sum



5) Приема от командния ред имена на 2 файла. Проверява дали по съдържание са еднакви. Ако са еднакви, да изтрие втория.

#!/bin/bash
fc1=""
fc2=""
if [ $# -lt 2 ]; then
    echo "not enough parameters"
    exit 1
fi
if  [ -e $1 ] && [ -e $2 ]; then 
  fc1=$( cat $1 )
  fc2=$( cat $2 )
  if [ $fc1 = $fc2 ]; then
    echo '1'
    rm $2
  else
    echo '0'
  fi  
else
    echo "one of the files do not exist"
    exit 2
fi


6) Приема от командния ред цяло число и връща неговия факториел.

#!/bin/bash
if [ $# -lt 1 ]; then
    echo "Not enough input parameters"
    exit 1
fi
re='^[0-9]+$'
if ! [[ $1 =~ $re ]] ; then
   echo "error: Not a number" >&2; exit 2
fi
declare -i fac=1
if [ $1 -eq 1 ]; then
  echo $fac
  exit 0
fi
for (( nnum=1;  nnum <= $1 ; nnum=$(( $nnum+1 )) ))
do
  fac=$(( $fac * $nnum ))
done
echo $fac



7) Генерира файл variations.txt, който съдържа всички пермутации с повторения на числата 1, 2, 3.

#!/bin/bash
for i in 1 2 3; do
  for j in 1 2 3; do
    for k in 1 2 3; do
      echo [i, j, k]=[$i, $j, $k] >> variations.txt    
    done
  done
done



 

 

fulltext

Keywords

echonumsthenbashприемаdoneчислакоманднияelseexitnnumфайлdeclarenumberвръщаparametersгенерирачетнодалиtxtecho