Artigo Diretório
Programação de script de shell
Requisitos de formato de script
1. O script começa com #! / Bin / bash
2. O script precisa ter permissões de executável
O primeiro shell script
vim hello.sh
#!/bin/bash
echo "hello,world~"
Métodos de execução comuns de scripts
1. (Digite o caminho absoluto ou relativo do
script ) Primeiro, dê a permissão + x ao script e, em seguida, execute
2. Sh + script, não há necessidade de dar permissão ao script + x, apenas execute-o diretamente
Variáveis Shell
1. As variáveis no shell do Linux são divididas em variáveis de sistema e variáveis definidas pelo usuário
2. Variáveis de sistema: $HOME $PWD $SHELL $USER
etc.
3. Exibir todas as variáveis no shell atual: conjunto
4.${ }中放的是变量,例如echo ${PATH}取PATH变量的值并打印,也可以不加括号比如$PATH
Definição de variáveis de shell
Sintaxe básica
1. Definir variável: nome da variável = valor
2. Variável não configurada: variável não configurada
3. Declarar variável estática: variável somente leitura, não pode ser desconfigurada
inscrição
vim var.sh
#!bin/bash
#定义变量A
A=100
#输出变量,需要加上$
echo $A
echo A=$A
echo "A=$A"
#撤销变量A
unset A
echo "A=$A"
#声明静态变量B
readonly B=2
echo "B=$B"
Regras para saída de
variáveis de shell
1. Os nomes das variáveis podem consistir em letras, números e sublinhados, mas não podem começar com números.
2. Não pode haver espaços em ambos os lados do sinal de igual
3. Os nomes das variáveis geralmente são maiúsculos.
Atribuir o valor de retorno do comando a uma variável
1 、
A=`date`
Execute o comando interno e retorne o resultado para a variável A
2. A = é $(date)
equivalente a usar crases
Por exemplo, adicione a seguinte declaração no exemplo acima
#将指令返回的结果赋给变量
C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"
O resultado da saída
definiu variáveis de ambiente
Sintaxe básica
1. Exportar nome da variável = valor da variável: exibir variáveis shell como variáveis de ambiente
2. Arquivo de configuração de origem: fazer com que as informações de configuração modificadas tenham efeito imediato
3. Nome da variável de eco: consultar o valor das variáveis de ambiente
Depois que a variável de ambiente é definida, ela pode ser usada no programa de shell
Comentários de várias linhas para scripts de shell
:<<!
内容
!
Variável de parâmetro posicional
Quando executamos um script de shell, se queremos obter as informações de parâmetro da linha de comando, podemos usar variáveis de parâmetro posicionais, como: ./myshell.sh 100 200, esta é uma linha de comando para executar o shell, que pode estar no script myshell Obtenha informações de parâmetro
Sintaxe básica
$ n: n é um número, $ 0 representa o próprio comando, $ 1- $ 9 representa o primeiro ao nono parâmetros, parâmetros acima de dez, parâmetros acima de dez precisam ser colocados entre colchetes, como $ {10}
$ *: representa todos os parâmetros na linha de comando e trata todos os parâmetros como um todo
$ @: também representa todos os parâmetros na linha de comando, mas trata cada parâmetro de maneira diferente
$ #: Representa o número de todos os parâmetros na linha de comando
Por exemplo: escreva o script myshell.sh
vim myshell.sh
#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有的参数=$*"
echo "所有的参数=$@"
echo "参数的个数=$#"
Insira o comando e obtenha as
variáveis predefinidas
As variáveis definidas pelo designer de shell antecipadamente podem ser usadas diretamente no script de shell
Sintaxe básica
$$: o número do processo do processo atual
$ !: O número do último processo em execução em segundo plano
$ ?: O status de retorno do último comando executado. Se o valor desta variável for 0, prova que o comando anterior foi executado corretamente, se o valor desta variável não for 0, prova que o comando anterior foi executado incorretamente.
Por exemplo, escreva o script preVar.sh
#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取它的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"
O resultado da execução é
Operação aritmética
Sintaxe básica
1 $((运算式))
ou $[运算式]
2, expr m + n
se você quiser atribuir o resultado de expr a uma variável, use crase
3, multiplicação de expr *
Aplicativo
Calcule o valor de (2 + 3) * 4 para
encontrar a soma dos dois parâmetros da linha de comando, 20 50
vim oper.sh
#!/bin/bash
#计算(2+3)*4的值
#第一种方式
RES1=$(((2+3)*4))
echo "RES1=$RES1"
#第二种方式,推荐
RES2=$[(2+3)*4]
echo "RES2=$RES2"
#第三种方式
TEMP=`expr 2 + 3`
RES4=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "RES4=$RES4"
#求出命令行的两个参数的和
SUM=$[$1+$2]
echo "SUM=$SUM"
Resultados do
Julgamento condicional
Gramática básica
[ 内容 ]
Retorne verdadeiro se não estiver vazio, use $? Para verificar (0 é verdadeiro,> 1 é falso)
Condições de julgamento comumente usadas
1, = comparação de sequência
2, comparação de dois inteiros
-lt é menor que
-le é menor ou igual a
-eq é igual a
-gt é maior que
-ne não é igual a
3, julgue de acordo com o arquivo permissões
-r tem permissão de leitura
-w tem permissão de gravação A permissão
-x tem permissão para executar
4, julgar de acordo com o tipo de
arquivo -f arquivo existe e é um arquivo regular
-e arquivo existe
-d arquivo existe e é um diretório
Julgamento de controle de processo
se julgamento
if [ 条件判断式 ]
then
代码
fi
Ou multi-branch
if[ 条件判断式 ]
then
代码
elif[ 条件判断式 ]
then
代码
fi
declaração de caso
case $变量名 in "值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于2,则执行程序2
;;
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
Código de amostra (lembre-se de usar a autorização chmod u + x antes de executar no caminho relativo)
vim ifdemo.sh
#!/bin/bash
#判断"ok"是否等于"ok"
if [ "ok" = "ok" ]
then
echo "equal"
fi
#23是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于"
fi
#判断/root/shcode/aaa.txt 目录中的文件是否存在
if [ -f /root/shcode/aaa.txt ]
then
echo "存在"
fi
Resultados do
vim ifCase.sh
#!/bin/bash
#输入的参数大于等于60,则输出”及格了“,如果小于60,则输出”不及格“
if [ $1 -ge 60 ]
then
echo "及格了"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
vim tsetCase.sh
#!/bin/bash
#当命令行参数是1时,输出”周一“,是2时输出”周二“,其他情况输出”other“
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
O ciclo de controle de processo
para loop
Gramática Básica 1
for 变量 in 值1 值2 值3...
do
程序
done
Gramática Básica 2
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
Exemplo de código
vim testFor1.sh
#!/bin/bash
#打印命令行输入的参数
#$*是把参数看成整体,只会输出一句话,$@是把参数区分对待,会输出多次
echo "使用$*获取输入参数"
for i in "$*"
do
echo "num is $i"
done
echo "================="
echo "使用$@获取输入参数"
for j in "$@"
do
echo "num is $j"
done
vim testFor2.sh
#!/bin/bash
#从1加到输入参数的值输出和
SUM=0
for(( i=1; i<=$1; i++))
do
SUM=$[$SUM+$i]
done
echo "总和SUM=$SUM"
loop while
Gramática básica
while [ 条件判断式 ]
do
程序
done
Exemplo de código
vim testWhile.sh
#!/bin/bash
#从命令行输入一个数n,统计从1+..+n的值是多少
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
#i自增
i=$[$i+1]
done
echo "执行结果=$SUM"
leia para ler a entrada do console
Parâmetros de opção de leitura de sintaxe básica
Opção
-p: especifica o prompt ao ler o valor;
-t: especifica o tempo de espera (segundos) ao ler o valor, se você não inserir o
parâmetro dentro da
variável de tempo especificada: especifique o nome da variável do valor lido
Exemplo de código
vim testRead.sh
#!/bin/bash
#读取控制台输入一个NUM1值
read -p "请输入一个数NUM1=" NUM1
echo "NUM1=$NUM1"
#读取控制台输入的NUM2值,在3秒内输入
read -t 3 -p "请输入一个数NUM2=" NUM2
echo "NUM2=$NUM2"
Atrase deliberadamente na primeira vez, insira o tempo pela segunda vez
função
Função do sistema
nome de base
返回完整路径最后/的部分,常用于获取文件名
basename pathname suffix
删掉所有的前缀包括最后一个'/'字符,然后将字符串显示出来
basename string suffix
sufixo é o sufixo. Se o sufixo for especificado, o nome de base removerá o sufixo do nome do caminho ou da string.
Por exemplo: retorne a parte "test.txt" de /home/aaa/test.txt e "test"
dirname
retorne fim do caminho completo / antes A parte, freqüentemente usada para retornar a parte do caminho
nome do diretório Caminho do arquivo absoluto: remove o nome do arquivo (parte não do diretório) do nome de arquivo fornecido contendo o caminho absoluto e, em seguida, retorna o caminho restante (diretório papel)
Por exemplo: return / home / aaa of /home/aaa/test.txt
Função personalizada
Gramática básica
[function] funname[()]
{
Action;
[return int;]
}
Chame diretamente o nome da função de gravação: funname [valor]
Por exemplo: Calcule a soma dos dois parâmetros de entrada
vim testFun.sh
#!/bin/bash
#定义函数
function getSum(){
SUM=$[$n1+$n2]
echo "SUM=$SUM"
}
#读取参数
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2
#调用函数
getSum $n1 $n2
Resultados do
Caso de backup de banco de dados
1. Faça backup do banco de dados zzf para / data / backup / db às 2:30 da manhã todos os dias.
2. A mensagem de prompt correspondente pode ser fornecida no início e no final do
backup. 3. O arquivo após o backup requer a hora do backup como o nome do arquivo e compactado em .tar A forma de .gz, como: 2021-03-12_230201.tar.gz
4. Durante o backup, verifique se há um arquivo de banco de dados do qual foi feito backup há 10 dias , e exclua-o se houver um
Entre neste diretório para criar o arquivo correspondente
cd /usr/sbin
vim mysql_db_backup.sh
#!/bin/bash
#备份目录
BACKUP=/data/backup/db
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=zzf123456
#备份的数据库名
DATEBASE=zzf
#创建备份目录,如果不存在,就创建,这里的&&类似于then
[ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
#备份数据库
mysqldump -u${
DB_USER} -p${
DB_PW} --host=${
HOST} -q -R --databases ${
DATABASE} | gzip > ${
BACKUP}/${
DATETIME}/$DATETIME.sql.gz
#将文件处理成 tar.gz
cd ${
BACKUP}
tar -zcvf $DATETIME.tar.gz ${
DATETIME}
#删除对应的备份目录
rm -rf ${
BACKUP}/${
DATETIME}
#删除10天前的备份文件
find ${
BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {
} \;
echo "备份数据库${DATEBASE}成功~"
Os resultados
vão para o diretório onde você pode descobrir que existe um arquivo de backup para
juntar tarefas de agendamento
crontab -e
30 2 * * * /usr/sbin/mysql_db_backup.sh
referência
https://www.bilibili.com/video/BV1Sv411r7vd