Возврат к shell
два способа временного выхода из редактора для ввода команд shell:sh и :!.
Команда :! позволяет выйти из редактора и запустить команду shell одной командной строкой. Сразу же после символа ! вводится команда shell.
Завершение работы с редактором vi
:wq-записать содержимое буфера vi в файл, который в данный момент редактируется и завершить работу с vi;
:q -записать временный буфер в новый файл filename и завершить работу с редактором vi;
:q! -завершить работу с редактором vi без записи содержимого буфера в файл; не учитываются все изменения, проведенные в буфере;
Задание.
1)Написать программу, выводящую приветствие и выполняющую элементарные действия, скомпилировать, запустить.
Текст:
#include<stdio.h>
int main()
{
int i=0;
printf(" i=%d \n",i);
scanf("%d",&i);
printf(" i=%d \n",i);
return i;
}
Компиляция:
$gcc t.c
Результат запуска:
$ a.out
i=0
5
i=5
$ a.out
i=0
9
i=9
$ a.out
i=0
y
i=0
2)Написать скрипт “калькулятор”
Текст:
echo "Hi!!!"
stop=0
while test $stop -eq 0
do
echo "input first operand,please:"
read op1
ch=0
while test $ch -eq 0
do
echo "input operation,please:"
read oper
case $oper in
"+")
ch=1
;;
"-")
ch=1
;;
"*")
ch=1
;;
"/")
ch=1
;;
"%")
ch=1
;;
*)
echo "illegal operation!!!try once more \n "
esac
done
echo "input second operand,please:"
read op2
# echo $op1$oper$op2
# ((res=op1operop2))
case $oper in
"+")
((res=op1+op2))
;;
"-")
((res=op1-op2))
;;
"*")
((res=op1*op2))
;;
"/")
((res=op1/op2))
;;
"%")
((res=op1%op2))
;;
esac
# echo $res
echo "Result:" $op1$oper$op2"="$res
echo "continue y/n?"
read answ
case $answ in
"n")
echo "Bye!!!"
stop=1
;;
"N")
echo "Bye!!!"
stop=1
;;
esac
done
Запуск скрипта на выполнение:
$ myscr.sh
Результат:
$ myscr.sh
Hi!!!
input first operand,please:
2
input operation,please:
o
illegal operation!!!try once more \n
input operation,please:
+
input second operand,please:
4
Result: 2+4=6
continue y/n?
y
input first operand,please:
8
input operation,please:
*
input second operand,please:
7
Result: 8*7=56
continue y/n?
n
Bye!!!
3) Написать программу, которая способна вызывать команды интерпретатора, передаваемые через командную строку, при отсутствии параметров выводит приветствие, сообщение об отсутствии параметров и прощается с пользователем, кроме того в качестве параметра(ов) могут выступать исполняемые файлы и скрипты (результат выполнения программы- их запуск).
Текст:
#include<stdio.h>
#include<unistd.h>
int main(int number,char* arguments[])
{
printf("Hi!!!\n");
if(number==1)//0
{ printf("No argumets!\n Bye!!!\n");
}
else{int i;
for( i=1;i<number;i++)
{
printf("Argument #%d : %s\n",i,arguments[i]);
printf("Result:\n");
system(arguments[i]);
}
printf("Bye!!!\n");
}
return 0;
}
компиляция:
$gcc main.c -o main
Результат запуска:
$ main.out
Hi!!!
No argumets!
Bye!!!
$ main.out pwd ls
Hi!!!
Argument #1 : pwd
Result:
/mnt/floppy
Argument #2 : ls
Result:
a.out main main.out myscr.sh myscr_last.sh sub try
fonareva main.c myscr myscr.sh~ set t.c
Bye!!!
$ main.out a.out
Hi!!!
Argument #1 : a.out
Result:
i=0
9
i=9
Bye!!!
$ main.out myscr.sh
Hi!!!
Argument #1 : myscr.sh
Result:
Hi!!!
input first operand,please:
4
input operation,please:
*
input second operand,please:
10
Result: 4*10=40
continue y/n?
y
input first operand,please:
6
input operation,please:
%
input second operand,please:
5
Result: 6%5=1
continue y/n?
n
Bye!!!
Bye!!!
Программа обращается к интерпретатору c помощью функции system() стандартной библиотеки языка С.
Вывод
В ходе данной работы были получены навыки работы в экранном редакторе vi, опыт работы с операционной системой Unix в командной строке,были написаны,откомпилированы и запущенны небольшие программы на С,а также скрипт,получено представление о передаче команд и исполнении скрипта.
