shell语法记录

一、变量

1、特殊变量

$0脚本的名称
$1,$2...脚本的参数;当n>=10时,需要使用${n}来获取参数
$#传递给脚本的参数数量
$?上一个命令的退出状态
$*以"$1 $2 … $n"的形式输出所有参数
$@以"$1" "$2" … "$n" 的形式输出所有参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号

2、括号

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
例如:

param="123"
echo "I am fine, thank ${param}you"

#不加括号就比较尴尬,$paramyou没有赋值
echo "I am fine, thank $paramyou"

3、单引号

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
例如:

param="123"
#输出:hello, ${param} !
echo 'hello, ${param} !'

单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行);
例如:

#报错
echo 'hello '123 world'
echo 'hello \'123 world'

#输出:hello '123' world
echo 'hello '123' world'

但可成对出现,作为字符串拼接使用。
例如:

param="world"
#输出:hello, world!
echo 'hello, '${param}'!'

4、双引号

双引号里可以有变量,可以出现转义字符。
例如:

#都可以
echo "hello \"123 world"
echo "hello '123 world"

5、字符串

${#string} 或 ${#string[0]}获取字符串长度

第 2 个字符开始截取 4 个字符

${string:1:4}

提取子字符串

查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)

`expr index "$string" io`

查找子字符串

6、数组

array=(value0 value1 value2 value3)定义数组
valuen=${array[n]}读取数组
${array[@]}读取数组全部数据

${#array[@]}或${#array[*]}

取得数组元素的个数
${#array[n]}取得数组单个元素的长度

declare -A site

site["zhangsan"]="hello, zhangsan"

site["lisi"]="hello, lisi"

site["wangwu"]="hello, wangwu"

关联数组
${!site[*]}或${!site[@]}获取数组的所有键

7、注释

多行注释:

:<<EOF
注释内容...
注释内容...
注释内容...
EOF

二、运算符

1、基本运算符

+
-
\*
/
%除余
=赋值
==相等
!=不相等

例如:

#求和(表达式和运算符之间要有空格)
val=`expr 2 + 2`

2、关系运算符

-eq是否相等
-ne是否不相等
-gt左边的数是否大于右边的
-lt左边的数是否小于右边的
-ge左边的数是否大于等于右边的
-le左边的数是否小于等于右边的

3、布尔运算符

!
-o
-a

4、逻辑运算符

&&逻辑与
||逻辑或

5、字符串运算符

=是否相等
!=是否不相等
-z长度是否为0
-n长度是否不为0
$字符串是否不为空

6、文件测试运算符

-b是否是块设备
-c是否是字符设备
-d是否是目录
-f是否是普通文件
-g是否设置了 SGID 位
-k是否设置了粘着位
-p是否是有名管道
-u是否设置了 SUID 位
-r是否可读
-w是否可写
-x是否可执行
-s是否为空(文件大小是否大于0)
-e是否存在(包括目录)

7、test 命令

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

if test -e ./shell.sh
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

三、输入/输出重定向

文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)

command > file将输出重定向到 file
command < file将输入重定向到 file
command >> file将输出以追加的方式重定向到 file
n > file将文件描述符为 n 的文件重定向到 file
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file
n >& m将输出文件 m 和 n 合并
n <& m 将输入文件 m 和 n 合并
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入

例如:将 stdout 和 stderr 合并后重定向到 file

command > file 2>&1

①将command的标准输出strout(1)重定向到file

②将2(标准错误输出)重定向到1(标准输出)

③所以说1和2都重定向到了file

四、文件包含

. filename   # 注意点号(.)和文件名中间有一空格

source filename
 

  • 17
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值