shell学习

set -e #遇到错误不继续执行, 默认是set +e,遇到错误继续执行

echo用法

是否使用双引号区别:使用双引号原样输出,不使用双引号会去除多余空格

1
echo hello   world  你好 outout:hello world 你好

对于变量同样有用

-n: 不换行, echo默认有换行

-e:能执行转义字符

输出带颜色的字符

declare用法,同义词 set, 相反 unset

-i 整形 -r只读-a数组 -f指定函数名

``反引号和$()

1
2
3
4
local_ip=`cat /etc/hosts | grep \`hostname\` | awk '{print $1}'`
local_ip2=$(cat /etc/hosts | grep `hostname` | awk '{print $1}')
echo $local_ip
echo $local_ip2

数组

定义 arr=(1 2 abc “hello world”)

使用*或@代表整个数组, #代表数组的长度, 不写是第一个元素

1
2
3
4
echo "${#arr[@]}"

echo "${#arr[*]}"
echo

# 数组的遍历

# 方式一

1
2
3
4
5
6
7
8
9
10
11
index=1

for ele in "${arr[@]}"

do

echo "第${index}个元素是:$ele"

count=`expr $index + 1`

done

echo “方式二—————“

1
2
3
4
5
6
7
8
9
for i in `seq 0 ${last_index}`

do

pos=`expr $i + 1`

echo "第$pos个元素是${arr[$i]}"

done

函数

定义:

func1(){}

长度: $#

返回值:$?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func_with_params() {

echo "参数长度:$#"

# 打印所有的参数

for i in `seq 1 $#` # seq 1 $#代表是 1到数组的长度

do

echo "第$i个元素是:$1"

shift #这个作用是将参数挪到前面

done

}

func_with_params xx yy zz

计算 expr let (())

@ 和*的区别

arr=(1 2 3)

for ele in “${arr[@]}” // 正常输出

for ele in “${arr[*]}” // 数组是一个整体 1

文件描述符

0 标准输入

1 标准输出

2 标准错误输出

作者

建指所向

发布于

2022-05-03

更新于

2023-11-07

许可协议