После нашего предыдущего исследования мы смогли вводить команды в терминал для выполнения некоторых распространенных операций, но мы всегда вводим команды одну за другой. Если команд нужно выполнить слишком много, это будет очень хлопотно. Итак, есть ли способ поместить множество команд в файл, а затем напрямую запустить файл для выполнения этих команд? Конечно, есть, это сценарий оболочки, который мы представим дальше!
Сценарий оболочки аналогичен пакетному файлу Windows, который записывает в файл последовательно выполняемые команды. Сценарии оболочки предоставляют такие функции, как массивы, циклы и условные оценки, которые обычно требуются для эксплуатации и обслуживания Linux или системным администраторам. Однако, как разработчикам встроенных систем, нам нужно освоить только самые основные части сценариев оболочки.
Сценарий оболочки представляет собой обычный текстовый файл, в котором команды выполняются сверху вниз, строка за строкой. Сценарии оболочки имеют расширение .sh. И первая строка сценария оболочки должна быть:
#!/bin/bash
Это означает использование bash.
Далее давайте напишем первый простой сценарий оболочки. Его основная функция — отображать в терминале «привет, мир!». Давайте теперь посмотрим на конкретный код!
#!/bin/bash
echo "hello world!"
Но давайте посмотрим на разрешения этого .sh-файла!
-rw-rw-r-- 1 ygr ygr 32 январь 26 15:08 my.sh
Мы видим, что этот файл не является исполняемым, поэтому изменяем разрешения, чтобы сделать его исполняемым.
chmod 777 my.sh
Далее давайте выполним этот файл и посмотрим, каков будет окончательный результат. Мы видим, что наш «привет, мир!» наконец-то был выведен.
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh
hello world!
Далее мы коснемся интерактивных сценариев. Мы уже научились печатать в терминале. Далее научимся вводить. Используемая нами команда — это команда чтения. Давайте посмотрим на наш конкретный код:
#!/bin/bash
echo "please input name:"
read name
echo "your name:" $name
Затем запустите эффект:
please input name:
chenyi
your name: chenyi
Наша команда чтения может добавлять множество параметров, мы кратко представим только один, а остальные вы сможете просмотреть самостоятельно.
#!/bin/bash
read -p "please input name and age: " name age
echo "your name = $name, your age = $age."
Эта команда используется для запроса пользователя при вводе текста. Давайте посмотрим на результаты работы:
please input name and age: chenyi 30
your name = chenyi, your age = 30.
Оболочка поддерживает только целые числа. Для выполнения числовых вычислений мы используем следующие операторы:
#!/bin/bash
echo "please input two int num: "
read -p "first num: " first
read -p "second num: " second
total=$(($first + $second))
echo "$first + $second = $total"
Результаты запуска:
please input two int num:
first num: 4
second num: 6
4 + 6 = 10
Команда тестирования в основном используется для проверки существования файла, разрешений и другой информации.,Возможны числовые значения,характер,Три аспекта тестирования документов. до этого,Давайте сначала представим его&&и||Эти две команды:
мы знаем,“&&”существоватьCНа языке это означает «и».,Но в синтаксисе оболочки,Это не означает и,Но что-то похожее,Давайте рассмотрим следующий пример.
“cmd1 && cmd2” Это означает, что если cmd1 выполняется правильно, то начинает выполняться cmd2. Если cmd1 выполняется неправильно, то cmd2 не выполняется. Можно только сказать, что это немного похоже на короткое замыкание в языке C. Давайте представим это дальше || оператор。
Мы знаем, что «||» означает «или» на языке C, но в синтаксисе оболочки это означает не «или», а «или».
“cmd1 || cmd2” Это означает, что если cmd1 выполнен корректно и корректно, cmd2 не будет выполнен, в противном случае будет выполнен cmd2. Это означает выполнение одного из двух, поэтому я говорю «да» или «значит». И эти две команды обычно используются вместе.
Далее давайте посмотрим на конкретное использование команды test!
#!/bin/bash
read -p "please input file name: " filename
test -e $filename && echo "$filename exist" || echo "$filename no exist"
Результаты запуска:
please input file name: C-test
C-test exist
Это необходимо для проверки существования файла. Давайте посмотрим на оценку строки:
#!/bin/bash
echo "please input two string: "
read -p "first string: " first
read -p "second string: " second
test $first == $second && echo "equality" || echo "inequality"
Результаты запуска:
please input two string:
first string: qwert
second string: qwert
equality
please input two string:
first string: qwe
second string: asd
inequality
Символ решения [ ], как следует из названия, используется для оценки, но в него можно вводить только == или != Далее давайте посмотрим на конкретное использование:
#!/bin/bash
echo "please input two string: "
read -p "first string: " first
read -p "second string: " second
[ "$first" == "$second" ] && echo "equality" || echo "inequality"
Эта команда эквивалентна приведенной выше. Но будьте осторожны: переменная должна быть заключена в двойные кавычки.
Далее давайте представим переменные по умолчанию, а затем посмотрим на некоторые переменные по умолчанию:
Давайте посмотрим на конкретный код:
#!/bin/bash
echo "file name:" $0
echo "total parameter num: " $#
echo "all paramenters: " $@
echo "first paramenters: " $1
echo "second paramenters: " $2
Результаты запуска:
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh qw er rt
file name: ./my.sh
total parameter num: 3
all paramenters: qw er rt
first paramenters: qw
second paramenters: er
нашshellХотя сценарий может пройти&&и||для достижения простого Условное суждение,Но он не подходит для чуть более сложных сцен. Итак, сценарий оболочки дает нам, если Оператор условного определения, то записывается следующим образом. индивидуальное использование кода:
if Условное суждение ; then
//Что делать, когда решение вынесено
fi
1 #!/bin/bash
2
3 read -p "please input(Y/N): " value
4 if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
5 echo "your input is Y !"
6 exit 0
7 fi
8
9 if [ "$value" == "N" ] || [ "$value" == "n" ]; then
10 echo "your input is N !"
11 exit 0
12 fi
Результаты бега следующие:
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh
please input(Y/N): y
your input is Y !
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh
please input(Y/N): n
your input is N !
В дополнение к if then у нас также есть операторы if then else, которые аналогичны if else в языке C. Конкретный метод записи следующий:
if Условное суждение ; then
//Условное Что нужно сделать при установлении суждения
else
//Условное суждение не установлено делать.
fi
или:
if Условное суждение ; then
//Условное Что нужно сделать при установлении суждения
elif [Условное суждение]; then
//Условное Что нужно сделать при установлении суждения
else
//Условное суждение не установлено делать.
fi
Давайте посмотрим на конкретный код:
1 #!/bin/bash
2
3 read -p "please input(Y/N): " value
4 if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
5 echo "your input is Y !"
6 exit 0
7 else
8 echo "your input is: $value !"
9 exit 0
10 fi
Результаты бега следующие:
please input(Y/N): t
your input is: t !
please input(Y/N): y
your input is Y !
Далее идет elif, давайте посмотрим на конкретный код использования:
1 #!/bin/bash
2
3 read -p "please input(Y/N): " value
4 if [ "$value" == "Y" ] || [ "$value" == "y" ]; then
5 echo "your input is Y !"
6 exit 0
7 elif [ "$value" == "N" ] || [ "$value" == "n" ]; then
8 echo "your input is: $value !"
9 exit 0
10 else
11 echo "your input is not recognized!"
12 fi
Результаты запуска:
please input(Y/N): r
your input is not recognized!
please input(Y/N): y
your input is Y !
please input(Y/N): n
your input is: n !
Далее давайте представим оператор case, который аналогичен нашему случаю в языке C. Конкретный метод записи выглядит следующим образом:
case $переменная in
«Содержимое первой переменной»)
Раздел программы
;; # Указывает конец этого программного блока! !
«Содержимое второй переменной»)
Раздел программы
;;
«Содержимое N-й переменной»)
Раздел программы
;;
esac
Далее давайте посмотрим на конкретную реализацию кода:
1 #!/bin/bash
2
3 case $1 in
4 "chen")
5 echo "chen yi is my baby!"
6 ;;
7 "ye")
8 echo "ye! happy every day!"
9 ;;
10 *)
11 echo "your input is not recognized!"
12 ;;
13 esac
Результаты бега следующие:
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh ye
ye! happy every day!
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh chen
chen yi is my baby!
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh chr
your input is not recognized!
Скрипты оболочки также поддерживают функции. Функция без параметров записывается следующим образом:
function fname () {
# Фрагмент функции
}
Конкретный код выглядит следующим образом:
1 #!/bin/bash
2
3 function help(){
4 echo "this is help cmd!"
5 }
6
7 function close(){
8 echo "this is close cmd!"
9 }
10
11 case $1 in
12 "-h")
13 help
14 ;;
15 "-c")
16 close
17 ;;
18 esac
Результаты бега следующие:
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh -h
this is help cmd!
ygr@ygr-виртуальная-машина:~/Desktop$ ./my.sh -c
this is close cmd!
Далее давайте представим функцию С параметрами. Конкретный метод записи следующий:
1 #!/bin/bash
2
3 print(){
4 echo "parameter 1:$1!"
5 echo "parameter 2:$2!"
6 }
7
8 print chen ye
Результаты бега следующие:
parameter 1:chen!
parameter 2:ye!
Сценарии оболочки также поддерживают циклы, например, while do Done, что означает, что если условие истинно, оно будет выполняться до тех пор, пока условие не станет истинным. Конкретный формат синтаксиса следующий:
while [состояние] # Состояние в скобках — это выражение суждения.
do # Цикл начинается
# Сегмент цикла цикла
done
Конкретный код реализации выглядит следующим образом:
1 #!/bin/bash
2
3 while [ "$value" != "close" ]
4 do
5 read -p "please input str:" value
6 done
7
8 echo "stop while!!!"
Результаты бега следующие:
please input str:er
please input str:stop
please input str:close
stop while!!!
Существует еще один метод до выполнения, который означает, что он зацикливается, когда условие не установлено, и не зацикливается после того, как условие установлено. Конкретный формат синтаксиса следующий:
until [состояние]
do
//Сегмент цикла цикла
done
Конкретный код реализации выглядит следующим образом:
1 #!/bin/bash
2
3 until [ "$value" == "close" ]
4 do
5 read -p "please input str:" value
6 done
7
8 echo "stop while!!!"
Результаты бега следующие:
please input str:co
please input str:close
stop while!!!
Цикл for в сценарии оболочки очень похож на цикл for в Python. Фактически, поскольку Python на самом деле является языком сценариев, вы можете узнать количество циклов, используя цикл for. Конкретный формат синтаксиса следующий:
for var in con1 con2 con3……
do
# Сегмент цикла цикла
done
#для цикла числовой обработки, метод записи
for((начальное значение; предельное значение; Размер шага выполнения))
do
# Сегмент цикла цикла
done
Конкретная реализация синтаксиса следующая:
1 #!/bin/bash
2
3 for name in ygr cy
4 do
5 echo "your name is :$name!"
6 done
Результаты бега следующие:
your name is :ygr!
your name is :cy!
Далее мы рассмотрим еще один цикл for:
1 #!/bin/bash
2
3 read -p "please input count: " count
4
5 total=0
6 for((i=0; i<=count; i=i+1))
7 do
8 total=$(($total+$i))
9 done
10
11 echo «Сумма первых n целых чисел равна: $total"
Результаты бега следующие:
please input count: 5
Сумма первых n целых чисел равна: 15