什么是shell

什么是shell

什么是shell

shell变量

  1. 定义并使用变量
    • 使用shell变量需要在变量前加$符号
    • 给变量加上花括号{}帮助解释器识别变量的边界,是一个好的习惯
    • 定义变量的时等号左右都不能有空格,很重要
  2. 只读变量readonly
  3. 删除变量unset
  4. 变量的类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Allen:shell pinn$ cat var.sh
#!/bin/bash
echo 'hello word'

##定义并使用变量
num=123
echo '$num'
echo "$num"

#只读变量
ro='No zuo no dai'
readonly ro
ro='change No zuo no dai'
echo '修改前',$ro
echo '修改后', $ro

#删除变量
address='Beijingshijingshan'
echo '删除前', $address
unset address
echo '删除后', $address

:<<EOF
#shell没有多行注释
#"EOF"可以换成其他符号eg:"!","'"等.
#循环输出etc文件夹下的所有文件名
#for var in `ls /etc`; do
#echo $var
#done
EOF

#运行
Allen:shell pinn$ . var.sh
hello word
$num
123
-bash: ro: readonly variable
-bash: ro: readonly variable
修改前,No zuo no dai
修改后, No zuo no dai
删除前, Beijingshijingshan
删除后,

shell字符串

单引号与双引号

字符串的常用方法

  1. 字符串的拼接
  2. 求长度
  3. 查找子串
  4. 提取子串
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

words='Once write, use everywhere!'

#长度
len=${#words}
echo $len

#提取子串
echo ${words:1:5}

#查找子串 TODO:macos暂时不能使用
expr index "$words" use

shell脚本传递参数

shell接收参数以$n的形式,\$0 表示文件名,\$1代表第一个参数。

参数处理方式:

  • $n,第几个参数
  • $#,参入的参数个数
  • $*,所有参数组成的字符串
  • $$,脚本运行的进程的ID
  • $!,后台运行的最后一个进程的ID
  • $@,与S*相同,但是以单个字符串形式显示参数,只有在“双引号“中有区别。
  • $-,显示shell使用的当前选项????什么鬼。。。。
  • $?,显示最后命令的退出状态,0表示正常,其他任何值表明错误
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
	Allen:shell pinn$ cat paras.sh
#!/bin/sh

echo "shell脚本接收参数"

echo "第0个参数:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
echo "参数个数:$#"
echo "脚本退出状态:$?"
echo "脚本运行的进程ID:$$"

for i in "$*"; do
echo "以\$*形式显示参数:$i"
done

for i in "$@"; do
echo "以\$@形式显示参数:$i"
done
Allen:shell pinn$ ./paras.sh 1 2 3
shell脚本接收参数
第0个参数:./paras.sh
第一个参数:1
第二个参数:2
第三个参数:3
参数个数:3
脚本退出状态:0
脚本运行的进程ID:3557
以$*形式显示参数:1 2 3
以$@形式显示参数:1
以$@形式显示参数:2
以$@形式显示参数:3

shell数组

Bash shell只支持一维数组,不支持多维数组
数组下标从0开始

  1. 创建,小括号以空格隔开(1 ‘asb’ 2);或者使用下标创建数组:arr[0]=1,arr[1]=’asb’
  2. 读取,读取数组一般形式:${arr[0]}
  3. 获取所有元素
  4. 获取长度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Allen:shell pinn$ cat arr.sh
#!/bin/sh

#创建:
arr=(1 "string" 2 3 A)

#下标获取:
echo ${arr[2]},${100}

#获取所有:
echo ${arr[*]}
echo ${arr[@]}

#获取长度:
echo "数组长度是:${#arr[*]}"
echo "数组长度是:${#arr[@]}"

Allen:shell pinn$ . arr.sh
2,
1 string 2 3 A
1 string 2 3 A
数组长度是:5
数组长度是:5
起风了,您的支持将鼓励我继续创作!