美文网首页
Shell这个语言好奇葩啊

Shell这个语言好奇葩啊

作者: 小米羊爱学术 | 来源:发表于2019-03-27 17:13 被阅读0次

傲娇的赋值
a = "apple" (wrong)
a="apple" (right)

奇怪的引号
单引号内所有内容原样输出,双引号内可以有转义符和变量

#!/bin/bash
word=apple
str='this is a ${word}'
echo ${str}
str="this is a ${word}"
echo ${str}
this is a ${word}
this is a apple

提取字符串时最后一个数字是字符串长度,而不是最后一个字符位置
从字符串第 2 个字符(第一个字符位置为0)开始截取 4 个字符,输出 unoo

string="runoob is a great site"
echo ${string:1:4} 
unoo

摸不着头脑的操作符

从左向右截取最后一个string后的字符串
${varible##*string}
从左向右截取第一个string后的字符串
${varible#*string}
从右向左截取最后一个string后的字符串
${varible%%string*}
从右向左截取第一个string后的字符串
${varible%string*}

不寻常的数组
只有一维数组,且数组内容以空格分隔,而不是逗号
读取整个数组时需要加[@]
读取第n个位置到第m个位置的内容,不能用[n:m]或者[n,m]

myarray=(v0 v1 v2 v3 v4 v5)
echo ${myarray[1]}
echo ${myarray[@]}
echo ${myarray[@]:2:4}
v1
v0 v1 v2 v3 v4 v5
v2 v3 v4 v5

多此一举的字符位置
左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示(直接用-1不好么)

var="abcdefg"
echo ${var:0-3}
efg

expr计算时,唯独*前要加转义符
括号前也要加转义符

val1=`expr 2 \* 2`
echo ${val1}
val2=`expr 2 * 2`
echo ${val2}
 4

expr: syntax error

条件表达式也是离不开空格的戏精

val1=`expr 2 \* 2`
echo  $val1"
val2=`expr 2 + 2`
echo ${val2}
if [ ${val1} == ${val2} ]
then
echo "right"
fi

数值比较大有玄机
[ expression1 OP expression2 ],OP 可以为 -gt、-lt、-ge、-le、-eq、-ne
((expression1 OP expression2)),OP 可以为 >、<、>=、<=、==、!=

字符串比较事多
[ string1 OP string2 ],OP为==、!=、\>、\<

布尔运算也要另辟蹊径

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true [ ! false ] 返回 true
-o 或运算,有一个表达式为 true 则返回 true [ $a -lt 20 -o $b -gt 100 ] 返回 true
-a 与运算,两个表达式都为 true 才返回 true [ $a -lt 20 -a $b -gt 100 ] 返回 false

逻辑运算符也不是吃素的
双中括号太厉害了

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100 || $b -gt 100 ]] 返回 true
a=1
b=10
if [ $a != $b -a `expr $a + $b` == 11 ]
then
echo "hi"
fi
if [[ $a != $b && `expr $a + $b` == 11 ]]
then
echo "hi"
fi

都输出了hi,但是后者必须要[[]]
判断字符串是否为0还是别用-n了吧
-n 为true表示字符串长度不为0,但是这个引号你说多平白无故?

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的结尾还要fi
if [ condition ]; then command; elif command; fi
for [ condition ]; do command; command; done
while [condition]; do command; command; done
until [condition]; do command; done

相关文章

  • Shell这个语言好奇葩啊

    奇怪的引号单引号内所有内容原样输出,双引号内可以有转义符和变量 提取字符串时最后一个数字是字符串长度,而不是最后一...

  • Shell 脚本基础和应用实例

    1 shell 简介和说明 Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个...

  • 论插入表达式

    正经人的思路… 这是要 一个if返回两个值啊,有了,fork()函数啊!!! ------ c语言中,这个奇葩函数...

  • Shell简介

    Shell简介: Shell既是一种命令语言,又是一种程序设计语言。Shell是指一种应用程序,这个应用程序提供了...

  • 嵌入式day12

    shell脚本的本质 shell脚本语言是解释型语言 shell脚本的本质:shell命令的有序集合 shell编...

  • 第1次课-Shell脚本语言-第1讲

    进入Shell语言基础学习? 1、第一个Shell程序? 2、Shell脚本语法->注释? 3、Shell脚本语言...

  • Shell脚本参数说明

    看了一遍shell的教程,感觉云里雾里的,感觉规则有点奇葩,可能跟他的语言属性有关,一种命令语言,也是一种程序设计...

  • Shell那些事儿之30分钟玩转Shell

    Linux Shell脚本教程:30分钟玩转Shell脚本编程 转自 C语言中文网 “30分钟玩转shell”这个...

  • Shell 基础

    Lesson1 - shell 脚本简介 Shell script 是解释型语言,而不是编译型语言 shell 分...

  • R、python、shell语言下的目录文件的搜索 增删查操作

    R语言 python语言 shell语言

网友评论

      本文标题:Shell这个语言好奇葩啊

      本文链接:https://www.haomeiwen.com/subject/egtzvqtx.html