0%

Shell实践笔记

Shell教学

开始

shell脚本必须使用#!作为开头说明该shell需要什么解释器来执行,即使用哪一种Shell.一般的:#!/bin/bash

指令

set指令

set 指令可根据不同的需求来设置当前所使用 shell 的执行方式,同时也可以用来设置输入参数.

设置shell执行方式

Linux实践笔记-命令-set

设置输入参数
1
2
3
4
5
6
7
8
//调用 set 是接一个或多个参数时,set 会把参数的值赋予位置参数,从 $1 开始赋值
$ cat set-it.sh
#!/bin/bash
set first second third
echo $3 $2 $1

$ ./set-it.sh
third second first

字符串

1) 由单引号’ ‘包围的字符串:
任何字符都会原样输出,在其中使用变量是无效的。
字符串中不能出现单引号,即使对单引号进行转义也不行。

2) 由双引号” “包围的字符串:
如果其中包含了某个变量,那么该变量会被解析(得到该变量的值),而不是原样输出。
字符串中可以出现双引号,只要它被转义了就行。

3) 不被引号包围的字符串
不被引号包围的字符串中出现变量时也会被解析,这一点和双引号” “包围的字符串一样。
字符串中不能出现空格,否则空格后边的字符串会作为其他变量或者命令解析。

拼接

替换

${string/substring/replacement} 仅仅替换第一次匹配
${string//substring/replacement} 替换所有的匹配

截取

从指定位置截取
1
2
3
4
5
6
7
//string:要截取的字符串
//start:开始索引,从0开始计数
//length:截取长度,可省略:即直至末尾
${string:start:legnth}

//同上,但从右边开始计数,但截取方向依然从左到右,此方法仅改变开始位置
${string:0-start:legnth}
从子字符串截取
1
2
3
4
5
6
7
8
9
10
//#:截取第一个匹配指定子字符串右边的所有字符
//*chars:任意长度子字符串
${string#*chars}

//同上,但匹配最后一个
${string##*chars}

//同上,但截取左边的所有字符
${string%*chars}
${string%%*chars}

循环

for

for in (python风格)
1
2
3
4
5
6
//variable 表示变量,value_list 表示取值列表,in 是 Shell 中的关键字
//in value_list 部分可以省略,省略后的效果相当于 in $@
for variable in value_list
do
statements
done

value_list的多种形式说明:

  1. 直接给出具体的值,多个值空格分隔. 如: 1 2 3或”a” “b” “c”.
  2. 取值范围${start..end},如:${1..100},从1到100.含头含尾.
  3. 命令的执行结果.如: ${seq 2 2 100},从2开始每次增加2,到100结束的所有数.
  4. 通配符.如: *.sh,当前目录所有.sh文件
  5. 特殊变量.如: $#,$*,$@等
您的支持是对我最大的动力 (●'◡'●)