❝Независимо от фронтэнда или бэкэнда, на основе изучения Linux вы также должны научиться писать несколько простых оболочек. Не только работа, но вы хотите делать что-то в своей повседневной жизни. Если вы делаете это вручную, это будет очень утомительно и отнимает много времени. Если вы можете использовать сценарии оболочки, это будет очень просто. Некоторые базовые знания оболочки популяризируются в этой статье. Он будет продолжать обновляться позже.
❞
Переменные основного синтаксиса оболочки
именование переменных оболочки
变量只能由大小写字母,数字和下划线组成。
变量名称不能以数字开头。
变量可以存储数字类型或者字符串类型。
变量赋值等号两边不能有空格。
字符串的变量可以用单引号或者双引号括起来。
Определите переменные:
➜ ~ name="xiaoka"
➜ ~ age=2
неверное определение
[root@iz2ze0ajic0vbv28hcdctpz hello]# 1212=sfds
-bash: 1212=sfds: 未找到命令
[root@iz2ze0ajic0vbv28hcdctpz hello]# ?aasd=hehe
-bash: ?aasd=hehe: 未找到命令
вызов переменной оболочки
Переменные вызываются с помощью знака $ или знака $, за которым следуют фигурные скобки. В общем, используйте фигурные скобки. Например:
[root@iz2ze0ajic0vbv28hcdctpz hello]# apple=hongfushi
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $applepen
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo ${apple}pen
hongfushipen
Если фигурные скобки не добавлены, оно будет прочитано как applepen как переменная, поэтому синтаксический анализ приводит к неоднозначности.
классификация переменных оболочки
- Переменные среды: Сохраните параметры, используемые операционной системой при ее запуске.
- Позиционные переменные: используются при передаче параметров скрипта.
- Предопределенные переменные: аналогичны переменным среды, за исключением того, что их нельзя переопределить.
- Пользовательские переменные: определяются пользователем, доступны для пользовательских скриптов.
пользовательская переменная: Определите базу данных переменных:
[root@iz2ze0ajic0vbv28hcdctpz hello]# database=mysql
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $database
mysql
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo ${database}
mysql
переменная окружения: Просмотрите глобальные переменные среды:
[root@iz2ze0ajic0vbv28hcdctpz ~]# printenv
XDG_SESSION_ID=2044
HOSTNAME=iz2ze0ajic0vbv28hcdctpz
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=113.44.42.209 56074 22
SSH_TTY=/dev/pts/1
USER=root
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
MAVEN_HOME=/usr/local/apache-maven-3.6.0
MAIL=/var/spool/mail/root
PATH=/usr/local/apache-maven-3.6.0/bin:/usr/local/jdk1.8.0_191/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
JAVA_HOME=/usr/local/jdk1.8.0_191
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
CLASSPATH=.:/lib/dt.jar:/lib/tools.jar
SSH_CONNECTION=113.44.42.209 56074 172.17.187.244 22
LC_CTYPE=zh_CN.UTF-8
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/printenv
определить переменную среды
[root@iz2ze0ajic0vbv28hcdctpz ~]# export kaka="kaka"
[root@iz2ze0ajic0vbv28hcdctpz ~]# env |grep kaka
kaka=kaka
удалить переменную окружения
[root@iz2ze0ajic0vbv28hcdctpz ~]# unset kaka
[root@iz2ze0ajic0vbv28hcdctpz ~]# env |grep kaka
w Если вы используете его в течение длительного времени, вы можете написать их в файле конфигурации. /etc/profile или .bash_profile в домашнем каталоге пользователя
переменная положения: Давайте сначала определим оболочку.
[root@iz2ze0ajic0vbv28hcdctpz ~]# cat test.sh
#!/bin/bash
echo "执行的文件: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
Выполните, чтобы просмотреть результаты.
[root@iz2ze0ajic0vbv28hcdctpz ~]# chmod +x test.sh
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./test.sh 1 2
执行的文件: ./test.sh
第一个参数: 1
第二个参数: 2
Предопределенные переменные: Обычно используются следующие предопределенные переменные.
#!/bin/bash
echo "执行的文件: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $*"
echo "当前脚本的pid: $"
echo "脚本参数个数: $#"
Посмотреть результаты выполнения
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./test.sh 1 2
执行的文件: ./test.sh
第一个参数: 1
第二个参数: 2
所有参数: 1 2
当前脚本的pid: 30170
脚本参数个数: 2
Просмотрите результат выполнения предыдущей команды.
[root@iz2ze0ajic0vbv28hcdctpz hello]# ls
test
[root@iz2ze0ajic0vbv28hcdctpz hello]# echo $?
0
оператор оболочки
Оболочка — это тоже язык, по сути, она похожа на другие операторы языка, но здесь мы поговорим о ней. В этом разделе рассказывается о контенте, связанном с операторами.
тип оператора
- арифметические операторы
- оператор отношения
- логический оператор
- Логические операторы
- строковый оператор
- оператор проверки файлов
арифметические операторы
Команда: выражение
Цель: Оценить значение выражения
Синтаксис: expr выражение
правило:
-
С обеих сторон символа оператора должны быть пробелы
-
При встрече со специальными символами, такими как *, вам нужно добавить обратную косую черту перед
-
Пробелы и специальные строки необходимо заключать в кавычки
Операция: (сначала напишите сценарий оболочки, связанный с операцией)
#!/bin/bash
i=1
j=2
addition=`expr $i + $j`
subtraction=`expr $i - $j`
multiplication=`expr $j \* $j`
division=`expr $j / $i`
mod=`expr $j % $i`
echo "addition=${addition} , subtraction=${subtraction} , multiplication=${multiplication} , division=${division} , mod=${mod}"
if [ $i == $j ]
then
echo "i 等于 j"
fi
if [ $i != $j ]
then
echo "i 不等于 j"
fi
Посмотреть Результаты:
➜ ~ ./operation.sh
addition=3 , subtraction=-1 , multiplication=4 , division=2 , mod=0
i 不等于 j
оператор отношения
Действие: (написать сценарий)
#!/bin/bash
num1=5
num2=8
if [ $num1 -eq $num2 ]
then
echo "$num1 是否等于 $num2 : num1 等于 num2"
else
echo "$num1 是否等于 $num2: num1 不等于 num2"
fi
if [ $num1 -ne $num2 ]
then
echo "$num1 是否不等于 $num2: num1 不等于 num2"
else
echo "$num1 是否不等于 $num2 : num1 等于 num2"
fi
if [ $num1 -gt $num2 ]
then
echo "$num1 是否大于 $num2: num1 大于 num2"
else
echo "$num1 是否大于 $num2: num1 不大于 num2"
fi
if [ $num1 -lt $num2 ]
then
echo "$num1 是否小于 $num2: num1 小于 num2"
else
echo "$num1 是否小于 $num2: num1 不小于 num2"
fi
if [ $num1 -ge $num2 ]
then
echo "$num1 是否大于等于 $num2: num1 大于或等于 num2"
else
echo "$num1 是否大于等于 $num2: num1 小于 num2"
fi
if [ $num1 -le $num2 ]
then
echo "$num1 是否小于等于 $num2: num1 小于或等于 num2"
else
echo "$num1 是否小于等于 $num2: num1 大于 num2"
fi
Результат операции:
➜ ~ ./relation.sh
5 是否等于 8: num1 不等于 num2
5 是否不等于 8: num1 不等于 num2
5 是否大于 8: num1 不大于 num2
5 是否小于 8: num1 小于 num2
5 是否大于等于 8: num1 小于 num2
5 是否小于等于 8: num1 小于或等于 num2
логический оператор
Напишите скрипт:
#!/bin/bash
num1=3
num2=23
if [ $num1 != $num2 ]
then
echo "$num1 != $num2 : num1 不等于 num2"
else
echo "$num1 != $num2: num1 等于 num2"
fi
if [ $num1 -lt 25 -a $num2 -gt 15 ]
then
echo "$num1 小于 25 且 $num2 大于 15 : 返回 true"
else
echo "$num1 小于 25 且 $num2 大于 15 : 返回 false"
fi
if [ $num1 -lt 25 -o $num2 -gt 25 ]
then
echo "$num1 小于 25 或 $num2 大于 25 : 返回 true"
else
echo "$num1 小于 25 或 $num2 大于 25 : 返回 false"
fi
Посмотреть Результаты:
➜ ~ ./bool.sh
3 != 23 : num1 不等于 num2
3 小于 25 且 23 大于 15 : 返回 true
3 小于 25 或 23 大于 25 : 返回 true
строковый оператор
Напишите скрипт:
#!/bin/bash
apple="apple"
pen="pen"
if [ $apple = $pen ]
then
echo "$apple = $pen : apple 等于 pen"
else
echo "$apple = $pen: apple 不等于 pen"
fi
if [ $apple != $pen ]
then
echo "$apple != $pen : apple 不等于 pen"
else
echo "$apple != $pen: apple 等于 pen"
fi
if [ -z $apple ]
then
echo "-z $apple : 字符串长度为 0"
else
echo "-z $apple : 字符串长度不为 0"
fi
if [ -n "$apple" ]
then
echo "-n $apple : 字符串长度不为 0"
else
echo "-n $apple : 字符串长度为 0"
fi
if [ $apple ]
then
echo "$apple : 字符串不为空"
else
echo "$apple : 字符串为空"
fi
Результаты:
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./string.sh
apple = pen: apple 不等于 pen
apple != pen : apple 不等于 pen
-z apple : 字符串长度不为 0
-n apple : 字符串长度不为 0
apple : 字符串不为空
Логические операторы
Напишите скрипт:
#!/bin/bash
num1=5
num2=8
if [[ $num1 -lt 10 && $num2 -gt 5 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $num1 -lt 10 || $num2 -gt 5 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
Результаты:
[root@iz2ze0ajic0vbv28hcdctpz ~]# ./logic.sh
返回 true
返回 true
оператор проверки файлов
Напишите скрипт:
~ cat testfile.sh
#!/bin/bash
file="/root/testfile.sh"
if [ -r $file ]
then
echo "该文件可读"
else
echo "该文件不可读"
fi
if [ -x $file ]
then
echo "该文件可执行"
else
echo "该文件不可执行"
fi
if [ -w $file ]
then
echo "该文件可写"
else
echo "该文件不可写"
fi
if [ -f $file ]
then
echo "该文件是普通文件"
else
echo "该文件是非普通文件"
fi
if [ -s $file ]
then
echo "该文件为空"
else
echo "该文件不为空"
fi
if [ -d $file ]
then
echo "该文件是目录"
else
echo "该文件不是目录"
fi
Выполните скрипт:
➜ ~ ./testfile.sh
该文件可读
该文件可执行
该文件可写
该文件是普通文件
该文件为空
该文件不是目录
Оценка состояния оболочки и управление технологическим процессом
По сути, суть управления процессами схожа, но есть небольшие отличия в синтаксисе, о которых мы и поговорим в этом разделе.
одна ветвь, если
Блок-схема:
Пример:
➜ if cat if-one.sh
#!/bin/bash
a=10
if [ a > 5 ]
then
echo "a 大于 5"
fi
Результаты:
➜ if ./if-one.sh
a 大于 5
двойная ветвь, если
Блок-схема:
Пример:
➜ if cat if-double.sh
#!/bin/bash
age=18
if [ $age -ge 18 ]; then
echo "成年"
else
echo "未成年"
fi
Результаты:
➜ if ./if-double.sh
成年
многоветвевой оператор if
Блок-схема:
Пример:
➜ if cat if-multi.sh
#!/bin/bash
money=10
if [ $money -lt 1 ]
then
echo "1块钱都没有的比皮卡丘决定在家吃土"
elif [ $money -ge 1 -a $money -lt 5 ]
then
echo "老板我要大白兔奶糖"
elif [ $money -ge 5 -a $money -le 10 ]
then
echo "老板我要巧克力"
else
echo "老板给我拿个鸡腿"
fi
Результаты:
➜ if ./if-multi.sh
老板我要巧克力
❝Эта статья обновила некоторые базовые знания оболочки. Если вы хотите изучить ее, не копируйте ее, а напечатайте вручную. Постоянно обновляется. . . ⛽️
❞
В этой статье используетсяmdniceнабор текста