Shell Основы Quick Start, чтобы понять принцип работы оболочки

О Shell

Shell является программа, написанная на C, то пользователю использовать Linux мост. Shell является как командный язык является языком программирования.

Shell относится к приложению, приложение предоставляет интерфейс, через который пользовательский интерфейс для доступа к сервисам ядра операционной системы.

ш Кен Томпсон является первой Unix Shell, Windows Explorer представляет собой типичный графический интерфейс оболочки.

Shell Принцип работы

В Linux это операционная система, в строгом смысле этого слова, мы называем ядро, но среднестатистический пользователь не использует ядро ​​напрямую, а через оболочку. То есть, оболочка, сравнение Windows, графический интерфейс, который раскошеливаться. Простое определение является функция интерпретатора командной строки оболочки, чтобы перевести команды пользователя на обработку сердечника, в то время как основная обработка результатов перевода пользователя. Это можно увидеть оболочки в основном для нашей инструкции синтаксического анализа, разбора инструкции ядра Linux. Обратная связь приводит к результатам работы ядра, пользователю через разбор оболочки.

лично не выполнять команды оболочки в интерпретации времени, но икра дочерних процессы имеют дочерний процесс, чтобы завершить эту работу, это преимуществом является риском для других, когда возникают проблемы, которые выполняют инструкцию не будет влиять на оболочке (воздействие выполнение других команд). оболочка не может висеть, скорлупа однажды повесил ничего еще можно объяснить команды. Для нас обстреливать, чтобы обеспечить самый низкий риск сами, чтобы объяснить работу командной строки путем создания дочернего процесса. И до тех пор, как их оболочка ждать на него.

Shell Script

Shell скрипт (сценарий оболочки), является сценарием, написанным для оболочки. Указанная оболочка промышленность, как правило, относится к сценарию оболочки, но читатели должны знать, оболочка и сценарий оболочки два разных понятия.

интерпретатор сценариев оболочки

Linux Shell скрипт интерпретатором многих видов, система может быть несколько интерпретатора сценариев командной оболочки, вы можете cat /etc/shellsпросмотреть скрипт команды оболочки интерпретатора установки системы.

/bin/sh

/bin/bash

/bin/rbash

Потому что баш бесплатный и простой в использовании, широко используется в повседневной работе. В то же время, Bash является наиболее интерпретатор сценариев Linux системы Shell по умолчанию.

Сценарий оболочки головы, #! / bin / ш и #! / bin / Баш разница.

GNU / Linux операционной системы / бен / ш Это символическая ссылка на баш (Bourne-Again Shell), но ввиду Баша слишком сложно, некоторые люди Баша портированы из NetBSD в Linux и изменил свое название на тир Debian Альмквист Shell), и рекомендовали / бен / ш указывает на него (мягкие), сценарии для более быстрой скорости выполнения. Даш Shell Bash Shell, чем гораздо меньше, POSIX соответствие.

sh一般设成bash的软链
在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式
也就是说 /bin/sh 相当于 /bin/bash --posix
sh跟bash的区别,实际上就是bash有没有开启posix模式的区别

Первый сценарий оболочки

Создание нового файла test.sh, расширение ш (ш от имени оболочки), расширение не влияет на выполнение сценария, увидеть имя EENOW как.

Run Shell Script Есть два способа:

1, в качестве исполняемой программы

CD в ​​соответствующий каталог:

CHMOD + х ./test.sh # скрипт имеет разрешение на выполнение ./test.sh выполнения сценария #

Внимание должно быть написано ./test.sh, а не test.sh, запускать другие двоичные программы, тоже писать прямо test.sh, система PATH Линукс будет идти в поисках никого по имени test.sh, и только / бен , / SBIN, / USR / бен, / USR / SBIN и так далее в PATH, текущий каталог, как правило, не в PATH, так test.sh не найти письменное распоряжение, сообщает системе использовать ./test.sh сказать , чтобы найти в текущем каталоге.

2, как пояснялось параметры

Этот режим работы запускается непосредственно интерпретатор, его параметр имени файла сценарий оболочки, такие как:

/ Бен / ш test.sh

Переменные оболочки

Грамматические правила: имя переменной = значение переменной my_name = «Gavin Pan»

Обратите внимание, что существует пространство между именем переменной и знаком равенства, которые могут быть вам знакомы и все языки программирования не являются одинаковыми. В то же время, имена переменного именования и другие подобные формулировки не могут быть использованы в Баше ключевых слов (команде справки, чтобы просмотреть доступные зарезервированные ключевые слова).

1. Типы переменных

Локальные переменные: локальные переменные, определенные в сценарии или команды, действительны только в текущем экземпляре оболочки, запустите другую программу оболочки не может получить доступ к локальным переменным.

Переменные окружения: Все процедуры, в том числе оболочки запускается, может получить доступ к переменным окружения, некоторые программы требуют переменные окружения для обеспечения их нормальной работы. Она может быть использована командой набора для просмотра текущей переменной среды.

оболочки переменные: Специальная переменная, установленной программе оболочки. оболочки переменной среды переменная часть является, в частности, локальных переменных, чтобы обеспечить нормальную работу оболочки.

2. Определить переменные

my_name="Gavin Pan"

3. ссылочная переменная

echo $my_name
echo ${my_name}
#引用一个定义过的变量,只要在变量名前面加$即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。

4. определено Re-переменные

my_name = "Gavin"

my_name="Gavin Pan"

5. Чтение-только переменные

Используйте переменную только для чтения команды становится только для чтения переменных

my_name = "Gavin"
readonly my_name
my_name="Gavin Pan"

6. Удаление переменных

my_name="Gavin"
unset my_name
echo $my_name

Используйте отключенное команду, чтобы удалить переменные не могут быть использованы снова после того, как переменная удаляется, в то время как команда снята с охраны не может удалить переменные только для чтения.

строка Shell

программирование Строка оболочки является наиболее распространенным и полезным типом данных (кроме чисел и строк, но и других типов удобно не хватает), то строка заключена в одинарные кавычки, двойные кавычки могут быть использованы, это может быть осуществлено без кавычек. Разница между одинарными и двойными кавычками похожи с PHP.

str1='hello Gavin'
str2="hello Gavin"
str3="hello \"$my_name\"
echo str1 #hello Gavin
echo str2 #hello Gavin
echo str3 #hello "Gavin Pan"

Преимущества двойных кавычек: Там может быть переменной, вы можете избежать характер.

Операции, связанные со строками

#拼接字符串
a="a"
b="b"
c=$a$b 或者 c="$a $b"
获取字符串长度
str="abcdefg"
echo ${#str} #output 7
提取字符串
echo ${str:1:3} #output bcd
以上例子表示从字符串的第二个数字往后截取3个字符
查找字符串
echo `expr index "$str" cb` #output 2
注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。
查找字符 c 或 b 的位置(哪个字母先出现就计算哪个)

массив оболочки

В Shell, со скобками для массива, элемента массива , деленному на символ «пространства». Общая форма массива определяется как: имя массива = (значение 1 значение 2 ... значение п) , например:

array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

не могут быть использованы непрерывно подстрочные и диапазон подстрочный не ограничивается. Общий формат массив считывания считывает значение элемента массива: $ {имя массива [индекс]} Пример:

valuen=${array_name[n]}
使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
取得数组元素的个数
length=${#array_name[@]}
或者
length=${#array_name[*]}
取得数组单个元素的长度
lengthn=${#array_name[n]}

оболочки, проходящий параметр

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
执行结果如下
$ chmod +x test.sh 
$ ./test.sh 1 2 3
Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3

раскошеливаться специальные символы

$ # Количество аргументов, переданных в скрипт $ * отображает все параметры тока процесс прошел $$ скрипт сценария идентификационный номер в виде одной строки $! $ @ И $ идентификационным номером последнего процесса в фоновом режиме * то же самое, но при добавлении цитаты, каждый параметр и возвращает значение $ в кавычках? отображать статус выхода последней команды. 0 означает отсутствие ошибки, любое другое значение указывает на ошибку

$ * И $ @ разница: та же точка: что все параметры передаются для представления сценария. Отличия: не «» включен, $ и $ @ параметров состав списка с $ 1 $ 2 ... $ п формы. Является ли «» включено «$ » сбрасывает все параметры в целом, в «$ 1 $ 2 ... $ п-'form сформировать всю строку,» «Отдельно будет каждый параметр» $ @ $ 1 «» $ 2 " ... в виде «$ N» составил список параметров.

Основные операторы оболочки

Арифметические операторы

Родной баш не поддерживает простые математические операции, но может быть достигнут с помощью других команд, таких как AWK и выражение, выражение используется наиболее часто.

выражение является средством вычисления выражения, использовать его, чтобы завершить оценку операции экспрессии.

a=1
b=2
val=`expr $a + $b`

Обратите внимание, что пространство вокруг оператора, чтобы иметь специальный вызов помнить знак умножения в передней \, другой никакой разницы.

Операторы отношения

Реляционная поддержка оператор только числовые, строка не поддерживается, если значение строки не является числом.

-eq обнаруживая два числа равны, возвращает истину равны. [$ A $ -eq б] возвращает ложь. -ne обнаружения двух чисел не равны, не равно возвращает значение ИСТИНА. [$ A -ne $ Ь] возвращает истину. -GT обнаружить ли число больше, чем справа налево, и если да, то он возвращает истину. [$ A $ -gt б] возвращает ложь. -lt обнаружить слева от числа меньше, чем право, и если да, то он возвращает истину. [$ A $ -lt Ь] возвращает истину. Детектирование ли -GE больше или равно слева направо число, если да, то возвращает истину. [$ A $ -ge б] возвращает ложь. -Le определения того, является ли меньше или равна справа налево, и если да, то число, то оно возвращает истину. [$ A $ -le Ь] возвращает истину.

Логические операторы

! НЕ операция, выражение истинно возвращает ложь, правда, в противном случае. [! Ложные] возвращает истину. -о или операция, есть выражение, которое возвращает истину, то верно. [$ A -lt 20 -o $ B -gt 100] вернуться верно. -a и операции, два выражения возвращают верно только так. [$ A -lt 20 -a $ B -gt 100] возвращает ложь.

Логические операторы

&& логическое И [[$ в -lt 100 && $ б -gt 100]] Назад к ложным || логическое ИЛИ [[$ в -lt 100 || $ б -GT 100]] Возвращает значение ИСТИНА

Строковые операторы

= Обнаруживает две строки равны, возвращает истину равны. [$ А = $ Ь] возвращает ложь. ! = Обнаруживает ли две строки равны, не равны Возвращения верно. [$ A! = $ B] возвращает истину. определения, является ли длина строки -z 0, 0 возвращает истину. [-Z $ а] возвращает ложь. -n 0 длина строки обнаруживается, а не нулевой возвращает истину. [-N "$ а"] возвращает истину. $ Обнаруживает ли строка пуста, не возвращает истину пустым. [$ A] возвращает истину.

a="abc"
b="efg"

if [ $a = $b ]
then
   echo "$a = $b : a 等于 b"
else
   echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
   echo "$a != $b : a 不等于 b"
else
   echo "$a != $b: a 等于 b"
fi
if [ -z $a ]
then
   echo "-z $a : 字符串长度为 0"
else
   echo "-z $a : 字符串长度不为 0"
fi
if [ -n "$a" ]
then
   echo "-n $a : 字符串长度不为 0"
else
   echo "-n $a : 字符串长度为 0"
fi
if [ $a ]
then
   echo "$a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

执行脚本,输出结果如下所示:

abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空

Файл Тестовые Операторы

-B файл является ли файл файлом блочного устройства обнаружения, и если да, то он возвращает истину. [-B $ файла] возвращает ложь. -C файл, является ли файл символьный файл устройства обнаружен, и если да, то он возвращает истину. [-C $ файл] возвращает ложь. -D файл, чтобы обнаружить, является ли файл каталогом, и если да, то он возвращает истину. [-D $ файла] возвращает ложь. -F файл, чтобы обнаружить, является ли файл обычным файлом (ни каталога, ни файл устройства), и если да, то он возвращает истину. [-F $ файла] возвращает истину. -G файл, чтобы обнаружить, есть ли файл бит SGID, и если да, то он возвращает истину. [-G $ файла] возвращает ложь. -К файл, чтобы обнаружить, есть ли файл липкий бит (Липкий бит), и если да, то он возвращает истину. [КИ $ файл] возвращает ложь. -P файл, чтобы обнаружить, является ли файл с именем трубы, и если да, то он возвращает истину. [-P $ файла] возвращает ложь. -U файл файл для обнаружения ли бит SUID, и если да, то он возвращает истину. [-U $ файла] возвращает ложь. Детектирование ли -r файл читаемый файл, если это так, то возвращает истину. [-R $ файла] возвращает истину. Является ли -w файл обнаружить файл может быть записан, и если да, то он возвращает истину. [-W $ файла] возвращает истину. -X файл исполняемых файлов для обнаружения ли, и если да, то он возвращает истину. [-X $ файла] возвращает истину. Определение является ли файл пустой -s файл (будь то размер файла больше, чем 0), не пусто возвращение правда. [-S $ файла] возвращает истину. -e документы тестовых файлов (включая директории) существует, и если да, то он возвращает истину. [-E $ файла] возвращает истину.

file="/test.sh"
if [ -r $file ]

управление потоком оболочки

if condition
then
	command
fi
if condition
then
command
else
commandN
fi
if condition
then
command
elif confition2
then
command2
else
cpmmandN
fi
for loop in 1 2 3 4 5
do
echo $loop
done
while condition
do
command
done
until condition
do
command
done
与while正好相反
echo '输入 1 到 4 之间的数字:'
echo '你输入的数字为:'
read aNum
case $aNum in
    1)  echo '你选择了 1'
    ;;
    2)  echo '你选择了 2'
    ;;
    3)  echo '你选择了 3'
    ;;
    4)  echo '你选择了 4'
    ;;
    *)  echo '你没有输入 1 到 4 之间的数字'
    ;;
esac

рекомендация

отwww.cnblogs.com/gavinpan/p/11236006.html