Помощь в упражнении по сценарию Bash

Автодел welcome.sh

Есть скрипт mkwelcome.sh:

#!/bin/bash
WelcomeFile=./welcome.sh
cat <<-"EOWelcome" >$WelcomeFile
    #!/bin/bash
    echo Welcome
    count=0
    old=$count
    ((count++))
    sed "s/^count=$old/count=$count/" -i $0
    ((count>4))&&rm $0
    EOWelcome
chmod +x $WelcomeFile

Замечание :Осторожно, используйте табулирование и отсутствие пробелов в начале строк!

Двойные кавычки гарантируют, что переменные не будут интерпретированы .

Тогда можно попробовать:

./mkwelcome.sh 
./welcome.sh 
Welcome
./welcome.sh 
Welcome
./welcome.sh 
Welcome
./welcome.sh 
Welcome
./welcome.sh 
Welcome
./welcome.sh 
bash:./welcome.sh: No such file or directory

Затем добавьте в свой.bashrc:

[ -f /path/welcome.sh ] && /path/welcome.sh

Красивая вариация

sed 's/^ \+/\t/' >mkwelcome.sh

#!/bin/bash
WelcomeFile=./welcome.sh
cat <<-"EOWelcome" >$WelcomeFile
    #!/bin/bash
    conWord=(first second third fourth fifth) 
    count=0
    echo Welcome to your ${conWord[count]} login!
    old=$count
    ((count++))
    sed "s/^count=$old/count=$count/" -i $0
    ((count>4))&&rm $0
    EOWelcome
chmod +x $WelcomeFile

Ctrl + д

./mkwelcome.sh 
[ -x./welcome.sh ] &&./welcome.sh 
Welcome to your first login!
[ -x./welcome.sh ] &&./welcome.sh 
Welcome to your second login!
[ -x./welcome.sh ] &&./welcome.sh 
Welcome to your third login!
[ -x./welcome.sh ] &&./welcome.sh 
Welcome to your fourth login!
[ -x./welcome.sh ] &&./welcome.sh 
Welcome to your fifth login!
[ -x./welcome.sh ] &&./welcome.sh 
[ -x./welcome.sh ] &&./welcome.sh 
0
21.12.2019, 19:44
2 ответа
  1. Создайте каталог под названием Exam и войдите в этот каталог.

    mkdir Exam && cd Exam

  2. Находясь в каталоге Exam, создайте файл с именем sc1.

    touch sc1

  3. Откройте файл sc1 и напишите сценарий bash, который -«Используя цикл while, создайте четыре файла (ex1, ex2, ex3, ex4 )в каталоге /home/student/Desktop/.

    См. первый пример здесь Создайте переменную с именем iи присвойте ей значение 1, затем запустите цикл и делайте это, пока iне ниже 5 (ниже, чем означает до 4 )-, или вы можете использовать -le 4для более низкого или равно 4. Добавьте 1 к последнему значению i перед следующей итерацией.

i="1"

while [ $i -lt 5 ]
do
  touch "ex$i"
  i=$[$i+1] 
done
  1. Скопируйте эти файлы в каталог /home/student/Exam/.

    cp ex* /home/student/Exam/

  2. Проверьте/подтвердите, есть ли у нас права на запуск файла ex1.

    Проверка путем настройкиls -l /home/student/Exam/ex1

    Исправить, запустивchmod 700 /home/student/Exam/ex1

  3. Переименуйте файл ex2 и назовите его log.

    mv /home/student/Exam/ex2 /home/student/Exam/log

2
28.01.2020, 02:21
i=1
while (( i <= 4 ))
do
   echo "ex$(( i++ ))"
done

Это самый "хороший" цикл while, который я могу сделать. Цикл for может принимать все три выражения:

for (( i = 1; i <= 4; i++ ))
do
   echo "ex$i"
done

Или вот так, полностью избегая ((двойных скобок )).

for i in 1 2 3 4
do
   echo "ex$i"
done

Это а в -между решением :легче сказать "1,2,3,4", чем "от 1 до 4".

Но touch "ex1"; touch "ex2"; touch "ex3"...не очень хорошая идея в целом -и, в частности, если вам говорят использовать цикл. Быть ленивым важно, но программист также должен быть слишком горд, чтобы копировать и вставлять (более одного раза ).

for i in 1 2 3 4
do
   touch "/home/student/Desktop/ex$i"
done

Это должен быть полный цикл. Если вам когда-нибудь понадобится больше или другие числа (или буквы/строки ), вы можете легко их изменить.

И так как мы все равно оставили цикл while, позвольте мне добавить кратчайший вид «цикла», раскрытие фигурных скобок:

touch /home/student/Desktop/ex{1,2,3,4}

или

dir=/home/student/Desktop
touch $dir/ex{1..4}

Tell me master can you answer a question:
Is it the fingers or the brain that you're teaching a lesson? 
                                       (White Stripes)
1
28.01.2020, 02:21

Теги

Похожие вопросы