Aula 14 do curso básico de Bash sobre expansões de parâmetros, explicando conceitos e usos para melhorar scripts.
Ask about this video. Answers come from its transcript only — with the timestamp, so you can check them.
Generated from the transcript and can be wrong — check the timestamp.
Key Takeaways
- Expansões de parâmetros são essenciais para scripts Bash eficientes e robustos.
- O cifrão ($) indica que o shell deve expandir o que vem a seguir, geralmente variáveis.
- Aspas influenciam diretamente o comportamento da expansão e interpretação de caracteres.
- Uso correto de chaves {} evita ambiguidades na expansão de variáveis.
- Expansões podem substituir estruturas condicionais para decisões simples, aumentando a eficiência.
What the video covers
- Introdução às expansões de parâmetros em Bash, destacando sua importância para scripts de qualidade.
- Explicação do uso do cifrão ($) para indicar expansões e a relação com variáveis e comandos.
- Diferenças no comportamento das aspas simples, duplas e ausência de aspas nas expansões.
- Importância das chaves {} para delimitar expansões e evitar ambiguidades.
- Como o shell processa e quebra a linha de comando para identificar variáveis e expandi-las.
- Exemplos de expansões para testar existência de variáveis e definir valores padrão.
- Uso de expansões para manipular strings, como maiúsculas, minúsculas e substituições.
- Demonstração de como as expansões podem substituir estruturas if-else para decisões simples.
- Explicação sobre a eficiência das expansões em comparação com comandos tradicionais.
- Dicas práticas para evitar erros comuns e melhorar a legibilidade e desempenho dos scripts.
Chapters
- 00:00Introdução às expansões de parâmetros em Bash
- 03:18O papel do cifrão ($) nas expansões
- 07:06Comportamento das aspas nas expansões
- 10:47Uso das chaves {} para delimitar expansões
- 14:24Processo de expansão e quebra da linha de comando
- 17:45Testando existência de variáveis e valores padrão
- 22:29Manipulação de strings com expansões
- 26:59Eficiência das expansões versus estruturas condicionais
- 29:47Dicas práticas para scripts Bash de qualidade
Full Transcript — Download SRT & Markdown
Speaker A
E aí, pessoal, tudo tranquilo? Então, essa é a nossa décima aula do curso básico de programação em Bash, e hoje é uma aula bastante cumprida, mas com coisas muito simples e, ao mesmo tempo, muito importantes. Se você quer fazer scripts e programas em Bash com qualidade, todas as expansões são importantes, mas algumas você já vinha usando desde o tempo lá do DOS, que você só usava o terminal, né? Por exemplo, asterisco, a interrogação para completar nomes de arquivos, aquele tiozinho para expandir o nome da sua página pessoal.
Speaker A
programas em bash com qualidade todas as expansões são importantes mas algumas você já vinham usando desde o tempo lá dodô que você só usava o o o terminal né por exemplo asterisco a interrogação para completar nomes de arquivos aquele tiozinho pra expandir o
Speaker A
Tá, agora tem outras expansões, especialmente as expansões de parâmetros, que vão fazer muita diferença no seu código. Por exemplo, existem expansões aqui que nós vamos ver que são capazes de testar se uma variável existe, tomar uma decisão do que fazer se ela não existir, tá? Coisa que normalmente você faria com uma estrutura de controle de decisão do tipo if-else, ou então até o próprio comando teste e um conector lógico. De qualquer forma, essas outras soluções, mesmo teste e um conector lógico sendo um builtin do shell, é do Bash, é aqui com as expansões de parâmetros nós podemos fazer isso com o símbolo muito menor e com o resultado uma eficiência, é um em um tempo de processamento inclusive bem menor, tá certo?
Speaker A
fazer se ela não existir tá coisa que normalmente você faria com uma estrutura de controle de decisão do tipo e fiel se ou então até o próprio comando teste e um conector lógico de qualquer forma essas outras soluções
Speaker A
Então, esses pequenos detalhes é que vou mostrando a qualidade do seu código e o que vai diferenciar um simples script, que é aqueles que a gente faz só para quebrar um galho, de um verdadeiro programa em Bash, tá certo?
Speaker A
menor tá certo então esses pequenos detalhes é que vou mostrando a qualidade do seu código e o que vai diferenciar um simples script que aqueles que a gente faz só para quebrar um galho de um verdadeiro programa em bash tá certo
Speaker A
Então, vamos lá. A gente vai começar essa aula falando de velhos conhecidos nossos que nós já vimos os anos também, é, usando também algum tempo durante o curso, mas que não caracterizávamos como expansões de parâmetro. Então, agora está na hora de dar uma olhada nisso.
Speaker A
dar uma olhada nisso primeiro é importante lembrar que num sentido o best da palavra parâmetro é o que a gente tem chamado de variável têm o mesmo sentido de variável então entendo a expansão de parâmetro mesmo que não seja um nome técnico da
Speaker A
Primeiro, é importante lembrar que, num sentido, o best da palavra parâmetro é o que a gente tem chamado de variável. Têm o mesmo sentido de variável. Então, entendo a expansão de parâmetro, mesmo que não seja um nome técnico da coisa, é como expansão de variável, tá? São operações que você faz, que o shell faz pra gente com as variáveis.
Speaker A
de parâmetro aqui vai começar com o cifrão da mesma forma que as expansões de comando desse tipo aqui ou as expansões a aritméticas tipo quanto aqui direto sem entender o que estou falando que nós já vimos em outras aulas
Speaker A
Outra coisa que é interessante, você notará antes da gente globo para falar das expansões em si, é que toda expansão de parâmetro aqui vai começar com o cifrão, da mesma forma que as expansões de comando desse tipo aqui ou as expansões aritméticas, tipo quanto aqui direto, sem entender o que estou falando, que nós já vimos em outras aulas.
Speaker A
comando porque também é uma expansão do céu então esse sinal zinho do cifrão ele vai simbolizar que o que vem depois tem que ser expandido inclusive fora um pouco desse contexto dessas aulas de expansões do shell é existe essa notação aqui que
Speaker A
Aliás, não é expansão de comando, isso aqui é essa substituição de comando, mas na verdade a substituição de comando é uma das expansões, então tá errado você às vezes falar expansão ou substituição quando se trata de uma substituição de comando, porque também é uma expansão do shell. Então, esse sinalzinho do cifrão vai simbolizar que o que vem depois tem que ser expandido.
Speaker A
o céu para fazer um certo tipo de expansão da eu posso dar um exemplo para vocês antes de a gente começar a ver as nossas estações vão ver as seguintes é só basicamente a idéia do dessa expansão é o seguinte
Speaker A
Inclusive, fora um pouco desse contexto dessas aulas de expansões do shell, existe essa notação aqui que nós utilizamos quando mexendo no IFS, tá certo? Lembra que nós fizemos isso em IFS=ba n? Pois é, isso aqui é mesmo, não estando no grupo do assunto aqui de expansões, ele é de certa forma está indicando para o shell fazer um certo tipo de expansão.
Speaker A
colocar por exemplo asterisco no final tá certo também nada seria executado ok muito bem sem aspas como é que ficaria isso ó stream e um n porque m porque esse barrinha aqui ele escapou ele não foi exibido aliás né e veio só o
Speaker A
Eu posso dar um exemplo para vocês antes de a gente começar a ver as nossas expansões. Vamos ver as seguintes. É só basicamente a ideia dessa expansão é o seguinte.
Speaker A
críptico aulas aula 10 porque a nossa atual certo então é é acho que as duplas têm um determinado com o comportamento a cei aspas tem outro comportamento e com aspas simples tem um terceiro comportamento diferente da que basicamente nada é executar
Speaker A
Bom, você sabe que se fizer echo entre aspas duplas 31 \n stream 2, isso entre as aspas, olha o que vai acontecer. Ele simplesmente colocou o stream e 11 barra e me distingue dois toque. Eu tenho alguns arquivos aqui, eu poderia colocar, por exemplo, asterisco no final, tá certo? Também nada seria executado.
Speaker A
comando de pesquisa no histórico por isso que ele deu aqui que o evento não foi encontrado tá já se eu fizesse isso sem aspas tá ele retornou stream os 32 a barra invertida foi igor foi ocultada repara certo aqui e ele executou essa
Speaker A
Ok, muito bem. Sem aspas, como é que ficaria isso? Ó, stream \n porque m porque esse barrinha aqui escapou, ele não foi exibido, aliás, né? E veio só o \n depois 32 e um asterisco fez com que se tornasse todos os arquivos que eu tenho nessa minha parte da ROM. Aliás, foi um bom lembrete do que eu tenho que ir para a pasta de aulas. Então, vamos lá, cd críptico aulas aula 10, porque é a nossa atual, certo?
Speaker A
simples nada é executado porém veja que interessante voltar o primeiro caso estranho os 32 taxa só linpack a tela e eu vou colocar o cifrão na frente com o cifrão na frente ele vai expandir esse tipo de carácter aqui que
Speaker A
Então, é, acho que as duplas têm um determinado comportamento, as aspas têm outro comportamento e as aspas simples têm um terceiro comportamento diferente da que basicamente nada é executado.
Speaker A
por causa do cifrão aqui na frente o papa se falou aqui na frente dessas aspas simples tá se fosse costa aspas duplas funcionaria é é aqui mudando simplesmente não porque a notação aqui para expandir caracteres anses e ou caracteres de controle como a
Speaker A
É claro que não dê exemplos aqui. Um exemplo com aspas duplas que pudesse ser satisfatório poderia colocar, por exemplo, como eu já mostrei para vocês, a exclamação aqui no começo. Ele tentou executar esse comando aqui, que é o comando de pesquisa no histórico, por isso que ele deu aqui que o evento não foi encontrado.
Speaker A
vai expandir isso como caracteres de controle barra n a mesma coisa seria com aqueles caracteres que correspondem àqueles códigos bené hospitais que correspondem a cores por exemplo do terminal por isso que também tem um cifrão zinho na frente normalmente quando a gente
Speaker A
Tá, já se eu fizesse isso sem aspas, tá, ele retornou stream os 32 a barra invertida foi ignorada, foi ocultada, repara, certo aqui, e ele executou essa substituição de nome de arquivo, retornando ao arquivo que eu tinha aqui nessa pasta.
Speaker A
fruta eu voltei o resultado de sempre que é banana só que aí é que entra um detalhe que eu não contei pra vocês nas outras aulas sobre principalmente falando sobre variáveis como agora está falando de expansão de parâmetros o que está
Speaker A
E se eu fizesse em aspas simples, aliás, esse daqui eu não executei com a exclamação na frente, fazer de novo faria o mesmo erro. Está enfim, com aspas simples nada é executado.
Speaker A
comando em vários pedaços chamados toquinhos é onde ele vai procurar símbolos que possui ou possuam algum significado no caso se foram e o nome de uma variável tá certo e vai tentar expandir esse valor antes de executar o comando que está
Speaker A
Porém, veja que interessante, voltar o primeiro caso estranho, os 32 taxa só linpack a tela e eu vou colocar o cifrão na frente. Com o cifrão na frente, ele vai expandir esse tipo de caractere aqui, que é chamado de caractere ANSI, tá? São basicamente caracteres de controle, tá certo? E \n significa que abrange linha.
Speaker A
antes do eco acontecer ele viu isso aqui e fez a substituição é dessa estrutura para banana então só repetindo o eco não está vendo essa essa sim táxis em aqui essa estrutura o que o eco está vendo é o que o shell já
Speaker A
Então, veja lá, stream \n stream \n 2, o barra ele foi interpretado pelo shell, foi expandido como uma quebra de linha por causa do cifrão aqui na frente.
Speaker A
expansão a rigor deveria ser feita com essas chaves porém isso só é obrigatório se houver alguma alguma continuação alguma stream e depois desse nome da seca por exemplo que pudesse ser confundida com um nome de uma variável então por exemplo aqui é
Speaker A
Opa, se falou aqui na frente dessas aspas simples, tá? Se fosse com aspas duplas funcionaria, é, aqui mudando simplesmente não, porque a notação aqui para expandir caracteres ANSI e ou caracteres de controle, como a gente costuma dizer mais popularmente, é com aspas simples.
Speaker A
assim eu tenho um banana seca como resultado está seca porque já estava aqui e banana porque foi a expansão dessa dessa estrutura aqui com o nome fruta então a rigor seria isso mas não é obrigatório a menos que seja uma
Speaker A
Por isso que quando a gente definiu o IFS igual a barra n, que é um caractere de controle equivalente a quebra de linha, a gente usou essa votação porque o shell vai expandir isso como caracteres de controle barra n.
Speaker A
nós já vimos também com bastante é fartura aqui no nosso curso vamos criar uma nova aqui ó pra variar outro exemplo que eu preciso renovar alunos joão maria e eu vou colocar aqui luiz carlos que é o nome do meu filhote
Speaker A
A mesma coisa seria com aqueles caracteres que correspondem àqueles códigos bem-hospitalares que correspondem a cores, por exemplo, do terminal. Por isso que também tem um cifrãozinho na frente normalmente quando a gente define isso, tá?
Speaker A
tenho outros símbolos aqui dentro que representam parte informações sobre a variável com que eu tô trabalhando sobre o parâmetro eu tenho que colocar as chaves portanto alunos índice zero isso aqui é a informação que eu tô passando do índice
Speaker A
Então, esclarecendo melhor como que o shell vai interpretar a presença de um cifrão, a gente já tem feito muito isso aqui, ó: fruta igual a banana. Acho que é preciso renovar o meu estoque de exemplos porque fazendo echo fruta, eu volto o resultado de sempre, que é banana.
Speaker A
ou e se essa barriguinha aqui gente quando aparecem manuais e help significa outa é arroba ou asterisco então se eu tiver assim a arroba ou a ser isso aqui no lugar do índice que vai mostrar exatamente o valor de todos os
Speaker A
Só que aí é que entra um detalhe que eu não contei para vocês nas outras aulas, principalmente falando sobre variáveis, como agora está falando de expansão de parâmetros. O que está realmente acontecendo aqui é o comando echo está enxergando essa variável fruta com cifrão na frente?
Speaker A
alunos maravilha até aqui tranquilo nós também vimos que a gente pode inverter esse processo e em vez de mandar expandir os conteúdos ou seja os valores de cada índice de cada elemento de uma lei eu posso ter retornado o
Speaker A
Não, porque o processo de expansão, como já expliquei para vocês, é na anterior. Ele faz com que o shell quebre essa linha de comando em vários pedaços chamados toquinhos. É onde ele vai procurar símbolos que possuem ou possuam algum significado, no caso, se forem o nome de uma variável, tá certo, e vai tentar expandir esse valor antes de executar o comando que está usando este valor como argumento, tá certo?
Speaker A
a expansão indireta seria uma tradução assim meio por alto porque é um tema original em direção a um fim que eles querem dizer com a direção não faço a menor ideia se alguém souber por favor pode contar pra mim
Speaker A
Então, na verdade, do ponto de vista do echo depois que o do-while terminar, ele está enxergando apenas isso aqui, ó, por isso que ele retorna banana. Mas do ponto de vista do shell, que viu antes do echo acontecer, ele viu isso aqui e fez a substituição dessa estrutura para banana.
Speaker A
que dá pra fazer isso aqui não sei qual é a utilidade mas alguém pode precisar se eu fizer isso aqui com frutas por exemplo as 100 a 100 à chávez o retorno e frutas olha que legal né eu também tenho o nome da variável de
Speaker A
Então, só repetindo, o echo não está vendo essa sintaxe aqui, essa estrutura. O que o echo está vendo é o que o shell já expandiu para ele, e é banana.
Speaker A
colocar o jogo da velha que no comecinho e ter um número de elementos da minha ray no caso tem três elementos pois é agora o que eu não contei para vocês também esse a novidade é que eu posso fazer assim ó fazer com frutas
Speaker A
Muito bem, então, entendido isso, vamos dar continuidade aos nossos velhos conhecidos falando do seguinte: a chamada ao nome de uma variável, ou seja, o acesso ao nome de uma variável, vai ser sempre uma expansão, e essa expansão, a rigor, deveria ser feita com essas chaves.
Speaker A
seis letras seis caracteres então essa era a novidade cifrão o eu falei cifrão gente me desculpa é jogo da velha ser kia ser filha da apaga todas as referências a palavra cifrão porque isso aqui fica na cabeça da gente né mas
Speaker A
Porém, isso só é obrigatório se houver alguma continuação, alguma string depois desse nome da variável, por exemplo, que pudesse ser confundida com um nome de uma variável. Então, por exemplo, aqui é a variável que existe, é fruta, mas ela está grudada na string seca. Se eu der...
Speaker A
stream no caso seis caracteres aqui de banana essa é a novidade muito bem estamos de volta aqui agora pra falar das substituindo diz que é um outro tipo de expansão do céu da onde a gente pode pegar um pedaço de uma string eu vou
Speaker A
usar uma string para facilitar a vida de vocês na compreensão dessa ideia é essa minha stream vou chamar de ms e mais 30 ela é a seguinte 1234567890 quantos caracteres shaq 10 a b c d f g h i j k quantos
Speaker A
caracteres têm aqui um dois três quatro cinco seis sete oito nove dez então no total tem uma string com 20 caracteres vamos ver se é verdade o eco ser filha não é não é cifrão né ali 20 caracteres confere maravilha
Speaker A
digamos que eu queira um pedaço dessa stream que comece logo após o quinto caracter quem que vem logo após o quinto caracter é o 6 aqui tá vendo o quinto caracter o número 5 correto então vamos fazer o seguinte vamos fazer um eco da
Speaker A
extream que está ms começando na posição 5 o melhor e vou explicar melhor isso na posição silva se eu puser o número 5 aqui o que acontece ele vai contar até o número cinco e o que vem depois é o que vai ser mantido
Speaker A
tudo que tiver até um carácter 5 vai ser apagado talvez a melhor forma de explicar isso fosse essa porque o que esse comando está fazendo fazendo é a pagando tudo da primeira à quinta posição eu acho que vai ser essa a melhor
Speaker A
explicação e aí o resultado de fato ele apagou tudo a partir da primeira até a 5ª posição tá se eu pusesse 7 ele apagou até a posição sete certo a outra forma que eu expliquei que talvez tempo é confundir um pouco vocês
Speaker A
é o seguinte que ele vai apagar tudo é ele vai ele vai retornar tudo a partir da posição seguinte a que você indicou então por exemplo de 1 a 5 a partir dessa posição 6 em diante é o que ele
Speaker A
vai retornar mas na verdade que ele está fazendo é apagar as cinco primeiras posições como aqui nesse exemplo ele já está pagando as sete primeiras posições tá é essa explicação talvez mais adequada porque quando a gente fizer de
Speaker A
trás pra frente vai fazer mais sentido olha só o que acontece se a gente puder menos sete que têm obrigatoriamente que ter um espaço aqui quem é menos sete de trás pra frente ó 367 esse conjunto do the até o j
Speaker A
é bom ver que ele retorna pra gente é exatamente o conjunto do the até o jovem ou seja quando faço negativo ele retorna tudo novamente a a apartir contando de trás pra frente sete caracteres o sétimo ele retorna tudo até o sétimo caracter
Speaker A
de trás pra frente aqui ele apagou tudo até o céu o caracter e retornou o restante aqui ele apagou tudo a partir do sétimo caracter de trás pra frente e retornou o restante esses sete aqui tá então o positivo e
Speaker A
negativo tem um comportamento diferente vamos fazer um outro exemplo - 5 e depois eu explico porque tem que ter esse espaço é obrigatório tá vendo ele contou se ele pegou cinco últimos caracteres se eu fizer menos 9 ele vai voltar pra gente os nove últimos
Speaker A
caracteres e obviamente ao bené porque o ar seria 10 então apaga primeiros positivo retorna os últimos quando é negativa mas a coisa complicou um pouquinho e voltar aqui cinco pra gente ver e eu vou colocar de novo fazer de
Speaker A
novo aqui oms a gente teve na tela e vamos repetir agora sim é que o ms 5 ou seja paga tudo até o quinto caracter é pode não ser positivo mas eu quero definir o intervalo também uma quantidade de
Speaker A
caracteres que você já não quero todo o restante eu quero a partir do que sobrou apenas três caracteres então apaga os cinco primeiros e depois só retorna mais três pra mim então ele retornou 678 é bem simples não é complicado fica
Speaker A
complicado com a gente coloca menos três que o que ele vai fazer ele vai que eu pedi apaga todos os cinco primeiros foi a paga cinco primeiros aí do que sobrou você vai fazer de trás pra frente você vai pagar três
Speaker A
caracteres a e vai retornar esse pedaço né foi o que aconteceu esse número fosse negativo -5 vamos voltar aqui - 5 sou livre para repetir esse processo só quero manter isso na tela é que ó foi menos cinco que é menos cinco aqui pra
Speaker A
gente opa nada é porque não deu espaço e falei que era obrigatório não falei - 5 ele apaga tudo - os cinco últimos caracteres não é isso f g h i mas esse eu defini uma quantidade por exemplo positiva 3 desse resultado que
Speaker A
retornou eu quero só os três primeiros e se eu quiser - 3 desse resultado que sobrou esse aqui em cima o que eu quero é apenas o que você apague os três últimos e fica apenas com os três primeiros dois
Speaker A
primeiros então é assim que a gente define uma substância inibe no crash beleza observe os exemplos e você vai dominar rapidinho a a manipulação de substituir hughes usando a expansão do céu muito bem então a gente já falava das expansões de
Speaker A
parâmetros é de uma dessas expansões parâmetros que eu mais gosto que que são aquelas que a gente faz testes com o a variável para ver se ela foi definida ou não estou então se falou dela é nulo e
Speaker A
de acordo com isso ea gente toma decisão sobre o que fazer com essa com essa informação é incrível essa expansão aqui que é que não tem um nome simplesmente ela identificada pelos símbolos de dois pontos com o sinal de menos sinal de
Speaker A
igual sinal de mais um sinal de interrogação com esse símbolo dois pontos - e é por isso que a gente não podia ter o isso aqui ó paí ó por isso que aqui é obrigatório esse espaço para não confundir com essa
Speaker A
expansão a qui tá vendo que é igual fique igualzinho símbolo está por isso que tem que ter espaço aqui na frente mas enfim essa primeira expansão ela faz o seguinte se o valor aqui disse nesse nome não existe ou se o valor dela for
Speaker A
nulo o que ela vai com o que vai acontecer é que o céu vai expandir nos no caso vai retornar é pra gente um valor padrão um stream e padrão valor padrão qualquer vamos fazer experiências você entender o bom uma variável que não
Speaker A
existe aqui fauna eu espero que não exista porque eu andei usando esse nome porque é coisa de uma 7 aí eu vou colocar valor padrão elefante tá retornou elefante porque que tornou o elefante porque fala não existe olha que
Speaker A
o eco fauna não existe por isso que ele entrou num elefante se eu colocasse o valor padrão aqui era onça ele retornava onça mas continua não existindo o que é diferente dessa segunda esse segundo caso aqui porque aqui se a variável não existir ela faz
Speaker A
atribuição do valor padrão ou seja se eu fiz aqui no primeiro a fauna é dois pontos - elefante ele retornou pra mim elefante mas não mudou não criou variável fauna aqui agora ele vai criar e olha só a fauna
Speaker A
dos pontos igual ao elefante ele retorna elefante e agora se eu fizer um eco fauna também é elefante porque fauna agora existe ea gente pode fazer uma set pra acabar com falcão a fauna mas que já fiz isso antes
Speaker A
acabar com a fauna com a 7 fazendo eco fauna tá vendo que não existe nada ea gente pode fazer aquela primeiro aquele primeiro caso a fala dos pontos - 11 ele retorna onça mais fauna ainda não existe mas eu quero que ela exista então
Speaker A
eu uso dos pontos igual tá e já digo qual é o valor então se não existir eu quero que seja elefante agora já existe certo eu vou repetir alertou mostrar que o primeiro já existe só falta um elefante
Speaker A
agora eu quero é nos pontos - o onça vai continuar retornando elefante dos pontos igual ouça continua retornando elefante e o valor de fauna ainda elefante ou seja essas duas situações que a gente está vendo aqui é só vão acontecer se a
Speaker A
variável não existia agora tem ao a situação contrária veja bem fauna já existe ela é elefante certo mas eu quero que ele retorne onça justamente se existir a variável fala olha lá retornou onça vou fazer com menos pra poder diferença
Speaker A
a variável fao não existe o valor dela elefante por isso que aquela não me retornou essa palavra onça mas aqui em cima ela é a variável existe e se ela existe por isso que tem um sinalzinho demais aqui se ela existe e
Speaker A
eu quero que você me retorne onça mas não está alterando a variável que continua sendo elefante está vendo que é legal é uma das das minhas expansões que é esse conjunto é um dos conjuntos favoritos pra mim das expansões
Speaker A
parâmetros dá para você fazer muita coisa na prática por exemplo eu posso criar um script onde eu eu gero uma mensagem a um valor de controle que onde eu digo que a variável por exemplo já está definida certo eu posso criar uma mensagem quando
Speaker A
tentará antes de tentar selar fazer qualquer coisa com essa variável eu eu testo ela aqui mesmo com as expansões olha que legal e se ela não existia eu posso atribuir é eu posso mandar também uma outra mensagem que seria o valor padrão dá
Speaker A
para mandar valor padrão é tanto ela não existindo quanto existindo aqui ó esse aqui por exemplo seria a variável não está definida certo aí eu estou deixando a variável por exemplo flora a flora não está definida fauna assim então a variável
Speaker A
não está definida então aqui é o caso onde ela não existe eu quero que o valor seja e retornado seja esse se ela existir eu quero que o valor retornado seja isso é bem legal isso né tem muitas aplicações inclusive aquela
Speaker A
de aí sim essa que nós fizemos aqui se não existir aproveita cria de uma vez já coloca esse valor lá maravilha é muito legal essa expansão de parada agora tem uma que é mais legal ainda mais essa aqui dá um pouquinho de um de
Speaker A
nós na cabeça da gente porque ela não é assim tão intuitiva que é quando a gente usa dois pontos igual desculpe dois pontos de interrogação tá e coloca uma mensagem de erro tá certo na mensagem de erro ok fao não existe e é elefante perfeito
Speaker A
flora dash erro isso aqui é um erro tá e aqui vem quem olha que quem escrevi mensagem de erro eu posso fazer a mensagem de erro ser por exemplo flora não está definida tá vendo a mensagem de flora não está
Speaker A
definida porque aí vamos a explicação é o dois pontos de interrogação é no terminal ele vai fazer com que essa mensagem aqui que a gente está escrevendo vá para a saída de erros do dossel por isso que daqui o bege
Speaker A
variável que deu problema flora ea mensagem flora não está definida se eu tivesse trabalhando dentro de um script o que aconteceria é que isso aqui e vegetal essa mensagem de erro o script executaria um exit está basicamente um
Speaker A
exit com o código de status unta porque é o mesmo que eu tenho aqui veja bem como é que a gente vê o status essa de saída do último comando eco cifrão interrogação e é um então esse aqui normalmente dá erro quando o
Speaker A
acontece da variável não existir tá certo ele vai retornar e ruim e isso dentro de um script seria o equivalente ao insitiu taag é não teria a mensagem de erro só quando a gente está usando o terminal que essa mensagem de erro
Speaker A
aparece essas aqui então esse aqui são os testes de variáveis as expansões que fazem testes de variáveis para a gente até atribuição porque isso aqui é uma atribuição é automaticamente é muito legal esse conjuntinho de expansões muito bem
Speaker A
agora a gente vai ver como é que a gente pode expandir maiúsculas e minúsculas direto do próprio shell o próprio bege sem usar nenhuma há um comando externo do tipo trt que é tradução né e coisas desse tipo
Speaker A
nada muito complexo pela simples expansões de parâmetros a gente pode trocar para maiúscula ou minúscula o primeiro caracter ou todos os caracteres de uma string bom ver como é que isso funciona aqui a nossa variável fauna já criada é falta igual elefante então eu
Speaker A
fazendo eco fauna ele retorna elefante se eu fizer agora a expansão alterando a caixa do primeiro caracter eu coloco aqui um circunflexo no finalzinho é fauna com circunflexo e olha que acontece a primeira letra de assis 30 ficou maiúsculo elefante
Speaker A
vamos ver se ele faz ele entende caracteres único e vamos fazer o seguinte ó é fauna igual a a àguia tá como acontece agora tem um ar com acento maiúsculo olha reconhece também é tranquilo dá pra usar isso em qualquer situação ele vai
Speaker A
converter para maiúsculas o primeiro pra maiúscula o primeiro caracter da nossa estrelinha e se for um número com a águia o maior risco não simplesmente não existe iluminação maio então você já sabe dos casos todos né voltar aqui a fauna igual elefante
Speaker A
tá certo nós fizemos isso retornou elefante com inicial maiúscula e se eu quisesse todos os caracteres 2 circunflexo elefante inteiro ficou em maiúsculas inclusive eu posso aproveitar e fazer o seguinte ó fauna fazer isso aqui repetir mesmo após fazer falta na
Speaker A
igual a própria fauna com tudo busco né expandida para maiúsculas e aí é com fauna opa achei aqui é o próprio elefante e tudo mágico porque eu fiz isso porque eu quero aproveitar para mostrar o inverso dessa situação que é quando ele expande
Speaker A
o primeiro caracter pra minúscula olha só é de elefante ficou menos cool legal né e se eu quiser todos os caracteres minúsculos 2 duas vírgulas linhas ali há certo então há uma vírgula primeiro caracter duas vírgulas todos os
Speaker A
caracteres legal é e eu também posso fazer que fauna igual a própria fala com todos os caracteres minúsculos lembra que falta agora tá assim né se eu fizer isso e dá um eco fauna lá voltou a ser tudo em minúsculas ok muito
Speaker A
simples de fazer é bem fácil de usar ok essa aqui então seria a quarta expansão dessa aula de hoje que a expansão de maiúsculas e minúsculas muito bem então agora nós vamos falar de uma expansão que faz pra gente ou aquilo
Speaker A
que chama de trin é significa a parar né então essa expansão ela a para o começo o final de uma string está um pouco diferente da daquela daquela substituindo que pode ser usada para parar também é mais as duas diferenças
Speaker A
maiores são os seguintes são os seguintes 1º lá na substituiria a gente define uma quantidade de caracteres a e o intervalo também a gente também definirá isso aqui a gente vai trabalhar com padrões e quando a gente fala de
Speaker A
padrões é quase como o isquemia de expressões regulares só que é extremamente mais limitado aqui nós só podemos usar esse bos ta esses meta caracteres o asterisco significando 0 ou qualquer quantidade de caracteres a interrogação significado apenas um
Speaker A
caracter e essa essa esse colchetes que nós já vimos que representam uma lista ou intervalo de caracteres tá certo então vou fazer aqui um exemplo com essa historinha que tem três palavras banana laranja abacate é e vocês vão entender a idéia de padrão
Speaker A
primeiro vamos falar na primeira expansão que faz esse tipo de processo de de aparar uma string a partir de um padrão é seria o seguinte eco a variável se chama frutas e eu colocar uma cerca e ilha e o padrão o padrão por enquanto a
Speaker A
letra b tá isso é pra diferenciar bem letra caracter de padrão tá por isso vou fazer desse jeito o primeiro veja bem dando um eco aqui o retorno que eu tenho é tudo o que vem depois de b ou seja a primeira
Speaker A
ocorrência de bebê foi eliminada e todo o resto foi retornado detalhe só a gente continuar eu não estou alterando a variável frutas tattoo soltou exibindo a parte que me interessa através da expansão a expansão nesse caso aqui não está alterando a variável
Speaker A
ela só está traduzido vamos dizer assim esse interpretando é esse sintáxi aqm retornando uma string e achei que ela me tornou foi a nana laranja abacate porque tudo que veio é tudo o que correspondia ao padrão aqui contando do início e é
Speaker A
isso que a ser que lhe indica foi aparado olha que a descrição todo o início das 30 e será parado até a primeira ocorrência de padrão a primeira ocorrência do padrão b foi aqui no começo se um outro bebê existe b letra existe
Speaker A
mais padrão b apenas b não existe porque aqui é p e um monte de coisa antes e como é que a gente representa esse monte de coisa antes ora monte de coisa a gente tem esse carácter aqui ó
Speaker A
achei risco qualquer coisa antes de b ó inclusive o bebê não é o bê que vem é antecedido de qualquer quantidade de caracteres inclusive 0 então continuou retornando pra mim a nana se eu fizer essa outra forma com dois é com dois
Speaker A
joguinhos da velha com duas cerquilho ilhas tá aí ele vai procurar a última ocorrência do padrão qual é a primeira ocorrência do padrão gente acabou de ver b por isso ele retornou o resto qual é a segunda ocorrência do padrão
Speaker A
vamos ver vai continuar percorrendo assim até chegar à aac eu tenho b antecedido antecedido de um monte de tralha tá certo é o p antecedido de um monte de tralha b antecedido de um monte de tralha esse é o padrão a então a segunda
Speaker A
a última ocorrência disso é aqui ó o caramba aqui certo então vamos ver o que acontece ele volta pra mim a kate porque de bebê e tudo que tinha antes toda a tralha de antes e foi apagada não foi apagado na
Speaker A
variável foi descartada na expansão só isso na exibição vamos dizer assim tá bom isso é o que a gente chama de padrão tá então não confunda padrão com o caracter nesse tipo de expansão a gente está expandindo padrões ok
Speaker A
porque eu poderia usar isso aqui isso é bem útil que isso aqui esse padrão faz show pegar só o primeiro aqui ele vai expandir a primeira vai vai eliminar aqui da expansão tudo o que vier é a partir do principio da primeira
Speaker A
hora é uma certeza é só a partir da primeira ocorrência desse padrão que é um espaço e um monte de coisa antes do espaço onde é que tem só espaço espaço espaço e um monte de pois antes do
Speaker A
espaço espaço e um monte de coisa antes do espaço inclusive o espaço anterior qual é a primeira ocorrência espaço e um monte de coisa antes então a primeira ocorrência é essa daqui tá que ele vai retornar laranja abacate
Speaker A
vamos ver se está certo entre laranja abacate muito bem e se eu quiser a última ocorrência do padrão asterisco espaço duas filhas então ele vai pegar essa aqui é a primeira ele vai continuar vendo se tem mais uma a ele achou outra então espaço
Speaker A
e um monte de coisa antes do espaço então ele tem que retornar só abacate olha só que legal se eu tivesse por exemplo que é o url ou melhor o arquivo igual bota assim http dois pontos duas barras teste pontocom barra exemplo
Speaker A
barra arquivo ponto cip digamos que estivesse querendo esse nome de arquivo arquivo pontos ea partir desse endereço de internet tá certo como é que eu poderia fazer eco arquivo certo a última ocorrência de qualquer coisa barra será que ele vai funcionar
Speaker A
aqui ó qualquer coisa bar com qualquer coisa antes eu tenho uma aqui é a primeira ocorrência essa aqui é a segunda ocorrência é essa aqui é a terceira ocorrência e essa quarta aqui é a última ocorrência será que ele vai retornar pra mim certo
Speaker A
retornou arquivo ponto cip tá é assim que a gente pode extrair o nome de um arquivo de um endereço de internet está entendido essa aqui é a busca vamos dizer assim do começo por fim a ser que lhe vai
Speaker A
fazer buscas no começo por fim de um determinado padrão de beleza se eu fizesse o contrário aqui o barra asterisco só pra você verificar pra gente não não teria nada a não teria nenhum efeito porque não existe aqui
Speaker A
logo no começo da strong um carácter barra por isso que a gente usa normalmente aquilo que a gente está procurando um asterisco antes a gente pode até considerar como sendo shane pac é como sendo um padrão aaa assim o que eu quero
Speaker A
procurar caracteres já colocou um asterisco antes tá eu não estou procurando esse carácter aqui aí esse raciocínio funciona só não é a realidade do comando da aceitasse dessa expansão tá certo porque isso aqui tudo é um padrão a expansão não termina
Speaker A
aqui tá certo aqui é um padrão então é muito comum a gente ver em tutoriais dizendo a você isso aqui mais o caracter que você quer para eliminar o dt e esse trecho do começo não tá errado não é
Speaker A
assim que funciona essa expansão e que ela expande um padrão e o padrão a gente pode ter um asterisco ou uma interrogação um grupo de caracteres uma lista aliás e aí a gente é coloca um caractere ou até uma palavra
Speaker A
podia ser uma palavra tá certo porque é um padrão e não caracteriza a gente procura mas dá pra pensar sim se você quiser simplificar a isso aqui é uma receita de bolo pra encontrar o nome de arquivo é de um
Speaker A
endereço na internet por exemplo tá mas o que você está fazendo é casando a última ocorrência de barra que venha antecedido de qualquer caracter prefeito e se fosse o contrário ao que tá aqui ó eu tenho mais dois é o tempo equivalente
Speaker A
de si mesmo comando dessa mesma expansão desculpe quando a gente faz de trás pra frente vamos instalar o banana laranja abacate aqui ó vamos limpá tá certo vamos fazer agora com o sinal de percentual que vai fazer a busca e golzinho antes só que de trás
Speaker A
pra frente esse é de trás para frente seja vão ver que vai ser importante a gente fazer isso aqui ó fazer primeiro com um percentual só é digamos que eu queira a primeira ocorrência do espaço pra frente tá certo então que eu tenho que fazer do
Speaker A
espaço um asterisco espaço seguido de qualquer coisa agora está de trás pra frente e isso o papa está em arquivo ainda desculpa e frutas falar isso retornou quem banana laranja porque do espaço e qualquer coisa antes contando de trás pra frente por isso que
Speaker A
tem o percentual é é para ser removido espaço seguido de qualquer coisa foi removido e se eu quisesse esse outro espaço que a última ocorrência de espaços seguido de qualquer coisa a mesma coisa de antes mesmo raciocínio ea
Speaker A
gente só coloca dois sinais percentual que vai dar exatamente o que a gente quer retorna só banana então espaço seguido de qualquer coisa foi totalmente eliminada tá certo e é assim que a gente faz o nosso trim muito bem então nós vamos
Speaker A
para a nossa última expansão dessa aula tá que é a expansão de busca e substituição também só lembrando não tem esse nome estou dizendo que ela faz tá certo é uma expansão que faz isso é importante a gente lembrar que toda vez
Speaker A
que a gente fala de padrão é o mesmo esquema dessas outras substituições a quitação apenas esses caracteres que serve pra gente representar grupos de caracteres conhecidos inclusive quantidade só que isso aqui é um carácter só isso aqui é todo e qualquer
Speaker A
e esse aqui é o único craque tech pode ocorrer e num determinado ponto da strini então é como é que a gente faz essa busca e substituição vamos pegar uma mensagem aqui por exemplo usa windows e seja feliz perfeito mas a
Speaker A
gente não quer que a pessoa use windows seja feliz então a gente vai pedir para trocar aqui ó a palavra windows fazendo uma expansão da mensagem substituindo o windows por mac o s né porque reconhece que deixa a pessoa
Speaker A
feliz não é isso vamos ver usimec o s e seja feliz ou mas também não quero não gosto de software proprietário gosta de software livre quero linux a beleza é um troca por linux veja aqui o padrão é uma palavra inteira
Speaker A
está o a palavra inteira windows tá não há contradições não há nenhuma dúvida do que deve ser procurado e também com apenas uma barra na frente eu estou substituindo apenas a primeira ocorrência dessa desse padrão certo porque eu estou dizendo isso e para esse
Speaker A
segundo caso aqui se eu puser w maiúsculo asterisco esse tipo de expansão é meio complicado que significa w asterisco deixa eu voltar aqui a mensagem que significa w asterisco w seguido de um monte de tralha de qualquer coisa que inclusive pode ser
Speaker A
coisa nenhuma tá certo então no caso aqui é todo esse trecho se eu fizer a hospedar o inter aqui agora ele vai substituir tudo o linux a partir de 1 - inclusive né windows e todo o restante foi substituído por linux os linux ponto
Speaker A
boa mensagem também mas não é a que eu queria está certo o problema aqui é que a característica dessa expansão é que ela vai sempre procurar é casar com o maior número de possibilidades do padrão então aqui é ele não vai parar porque
Speaker A
terminou uma palavra tá certo o que encontrou o espaço - que eu colocasse um espaço aqui vamos mostrar para você ó coloquei o espaço a deixar assim a substituição o w maiúsculo asterisco seguido de espaço então a w maiúsculo asterisco aqui tem
Speaker A
um espaço opa mas aqui também tem outro opa mas aqui também tem outro então na verdade como hoje disse pra você o casamento é feito com o maior número de possibilidades possível é um casamento que chamaria de guloso
Speaker A
quando a gente fala expressão regular que engoliria toda essa esse trecho aqui na extreme tá certo então com certeza a gente vai ter use linux feliz até posso melhorar essa frase colocando para substituir por linux e é um espaço
Speaker A
e aí fica legal de novo uso linux feliz tá certo essa é a característica do próprio dessa expansão é não existe uma forma 11 assim simples a gente resolver isso a não ser especificando melhor o que a gente quer substituir de dentro da
Speaker A
melhor forma possível por exemplo eu posso colocar isso aqui ó também não vai dar certo aqui ó tem um s ac e 1 s aqui ele vai casar com tudo mas eu posso colocar um espaço depois do s ó aí
Speaker A
a única situação onde eu tenho w o asterisco s e espaço é essa daqui eu não tenho mais nada que casa com essa com esse padrão então nesse caso eu colocar um espaço aqui também use linux esteja feliz tá então a única
Speaker A
forma de você melhorar a sua busca o seu padrão é tão retornando ele o mais específico possível talvez até sendo literal como nós fomos lá no primeiro exemplo quando nós substituímos o windows por michael s fomos totalmente literais aqui o padrão
Speaker A
é uma palavra tá certo há uma outra forma de trabalhar com essa expansão que é o nosso último assunto de hoje é quando a gente coloca duas barras na frente logo após o nome da da variável é aí ele vai procurar todas as
Speaker A
ocorrências então posso procurar todas as ocorrências da letra s esse substituir porches maiúsculo por exemplo estão lá uche windows cheia feliz tá quase enganou início daqui galego está o show in dous certo é então todas as ocorrências do padrão s que
Speaker A
apenas um caracter foram localizadas também diferente daquela daquela sobre aquelas expansões ali ó a a gente aqui está procurando o padrão em qualquer lugar da extreme e não a partir de um começo ou de um final de stream
Speaker A
tá certo é qualquer localização é a primeira localização dentro da estrita aqui se o padrão não existe logo no começo e não vai ser expandido aqui se não existe logo no final ele não vai ser expandido tá certo já que pode estar o padrão pode
Speaker A
estar em qualquer parte por isso que qualquer ocorrência do s foi substituída pela letra x maiúscula isso aqui gente vocês não fazem idéia tem pelo menos três comandos que o pessoal usa muito por aí nos seus escritos e que poderiam
Speaker A
ser substituídos por essa simples substituição tá ou então por que esse por esse por essa pressa strings a quito dessas há paragens essas expansões aqui tá porque pensa no comando ok a wk pensa no comando sede pense no comando kant pense no comando
Speaker A
tr nenhum deles é miltim todos eles têm acesso a disco e todos eles são excelentes para quando isso aqui não é possível de fazer ou é muito mais seria muito mais complicado fazer com expansões mas 99% das vezes tudo que você precisa
Speaker A
para solucionar um caso de substituição de um caractere encontrar um padrão e eliminar esse pedaço das 30 é de trocar maiúscula por minúsculas 99% das vezes dá pra resolver com expansões então preste bastante atenção assistir a essas aulas várias vezes fique sem essas
Speaker A
peças expansões mais básicas porque existem outras podem consultar também o manual do be no lado do baixe porque é um assunto que vale a pena o seu tempo vale a pena mexer tempo nisso ok um grande abraço então e até a próxima
Speaker A
aula quando nós vamos falar do comando composto fórum lupi e vamos começar a falar de loops ok então até a próxima
Topics:Bashexpansão de parâmetrosshell scriptingvariáveis Bashprogramação Bashscripts eficientesexpansão de variáveismanipulação de stringscurso Bashexpansões











