Sou novo no mundo Linux e tenho usado o Windows e escrito Visual C++ há mais ou menos um ano. Acho que o bash parece ser o shell mais popular no mundo Linux. Existe um shell Linux CLI que seria o mais próximo dos recursos bash, mas com sintaxe de tipos C/C++?
Responder1
Existe o CSH que se encaixa no projeto.
O shell C (csh ou a versão melhorada, tcsh, na maioria das máquinas) é um shell Unix criado por Bill Joy enquanto ele era estudante de graduação na Universidade da Califórnia, Berkeley, no final dos anos 1970. Foi amplamente distribuído, começando com o lançamento 2BSD do sistema BSD Unix que Joy começou a distribuir em 1978.2Outros contribuidores iniciais para as ideias ou o código foram Michael Ubell, Eric Allman, Mike O'Brien e Jim Kulp.
Ou você pode tentar TCSH (Obrigado! @muru)
tcsh (/ˌtiːˈsiːʃɛl/ "tee-cee-shell", /ˈtiːʃɛl/ "tee-shell", ou como um acrônimo "tee cee ess aitch") é um shell Unix baseado e compatível com o shell C (csh). É essencialmente o shell C com conclusão de linha de comando programável, edição de linha de comando e alguns outros recursos. Ao contrário de outros shells comuns, as funções não podem ser definidas em um script tcsh e o usuário deve usar aliases (como em csh).
Observe que esses shells não são tão amplamente usados quanto o bash e, portanto, alguns makefiles e scripts de shell podem se comportar de maneira imprevisível.
Responder2
Bash suporta alguma sintaxe no estilo C. Por exemplo:
As declarações/definições de funções são sintaticamente semelhantes às declarações/definições de funções em C, exceto que você não define nem parâmetros (que são buscados usando os parâmetros posicionais
$1
,$2
,$3
, ...) nem tipos de retorno (o Bash não usa tipos). ):foo() { # ... }
Ou novamente de forma semelhante a C usando uma declaração/definição embutida:
foo() { #...; }
Deve-se notar que ao usar uma declaração/definição inline, a primeira e a última instrução devem ser separadas por espaço de
{
e}
respectivamente e que (novamente de forma semelhante a C) cada instrução deve ser separada por ponto e vírgula das outras e que a instrução final deve terminar com um ponto e vírgula:foo() { command1; command2; command3; }
Para completar, uma forma alternativa de declarar/definir função é usar a palavra-chave
function
, que não precisa do()
nome da função:function foo { #... }
Você pode avaliar expressões no estilo C colocando-as entre parênteses duplos
(())
: vários operadores no estilo C são suportados (incluindo atribuição), por exemplo:=
,>
,>=
,==
,!=
,<
,<=
,&&
,||
,!
, entre outros:$ i=0 $ j=1 $ ((i > j)) && echo True $ ((i >= j)) && echo True $ ((i == j)) && echo True $ ((i != j)) && echo True True $ ((i < j)) && echo True True $ ((i <= j)) && echo True True $ ((i && j)) && echo True $ ((i || j)) && echo True True $ ((\! i)) && echo True True $ ((\! j)) && echo True $ ((i = j)) $ echo $i 1 $ echo $j 1
Esta forma de avaliar expressões no estilo C pode ser usada em conjunto com
if
instruções ewhile
:until
if((i == 0)); then # ... done
while((i == 0)); do # ... done
until((i == 0)); do # ... done
Mais notavelmente,
(())
também permite escreverfor
condições de loop no estilo C:for((i = 0; i < 3; i++)); do # ... done
A avaliação de expressões no estilo C não oferece suporte à atribuição do resultado da avaliação; para isso você pode usar a expansão aritmética (
$(())
), que permite algum tipo de atribuição de expressões no estilo C:$ i=0 $ j=1 $ k=$((i > j)) $ echo $k 0 $ k=$((i < j)) $ echo $k 1 $ x=$((1 + 2 + 3)) $ echo $x 6
Operadores de incremento/decremento prefixados/pós-fixados estilo C também são suportados:
++i i++ --i i--