02 Shell基础
1. Shell分类
- shell有很多种,如ksh、csh、bsh,常使用的是bash
- Bash == Bourne Again shell
2. 查看本机支持的shell
more /etc/shells
#/bin/sh
#/bin/bash
#/sbin/nologin
#/usr/bin/sh
#/usr/bin/bash
#/usr/sbin/nologin
#/usr/bin/tmux
3. shell在操作系统中的位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hKYULzLN-1619686365239)(D:\学习笔记\linux\img\bash_pos.png)]
4. 登陆linux常用工具
- Putty
- Pietty putty
- SecureCRT
- Winscp
- xshell
5. 变量
5.1 普通变量
-
变量定义
#定义变量 var=xxx #定义变量包含空格 var1="my name is xxx" #命令执行结果保存变量 var2=`ls ~` #命令执行结果保存变量2 var3=$(ls)
变量不需要定义,可以直接使用,未定义的变量值是空的
变量定义是“=”左右不能有空格
如果定义的变量中有空格必须使用“或‘括起来
反引号和 ( ) 都 表 示 命 令 的 输 出 作 为 变 量 内 容 , ()都表示命令的输出作为变量内容, ()都表示命令的输出作为变量内容,()的优先级高,并且支持嵌套
定义的变量可以通过set命令查看
-
变量引用
#简单引用 echo $var # xxx #严谨模式 echo $varx #返回空 echo ${var}x # xxxx
shell中空格作为命令、参数的分隔符,需要小心使用
var= 456
#-bash: 123: command not found
var = 456
-bash: var: command not found
使用空格分开当var命令执行
5.2 数组
-
定义:使用()定义数组变量
array=(1 2 3 4);echo ${array[2]}; // 3 #定义数组,打印第三个元素
数组通过索引访问,索引从0开始
不加索引直接访问数组变量 a r r a y 等 效 于 array等效于 array等效于{array[0]}
索引访问时使用大括号括起来,否则变成访问$array,如echo $array[2],打印1[2]
-
通过命令赋值
array2=(`ls`) for i in ${array2[*]};do echo $i;done
(``)与$() 区别,一个是保存数组,一个字符串
$(``)命令返回嵌套,先执行``中的命令,输出的结果作为命令执行
-
引用变量
#访问单个元素${array[index]} ${array[3]} #返回第4个元素 #引用整个数组 ${array[*]} #放回数值所有变量组成的字符串
-
bash中特殊符号
符号 含义 “” 双引号,括起来表示一段字符串,如果里面有特殊字符进行替换,如$var变量,\n转义 ’‘ 单引号,也表示其内容是字符串,但是保持原义不进行替换 `` 反引号,表示命令输出,非常有用 \ 反斜线,某些情况表示转义 $() 表示命令执行结果,与``类似,不过可以嵌套 (()) 双括号,整数扩展,表示把变量当作整数处理((a=1+3)) $(()) 对变量进行操作,并返回操作结果,如b= ( ( 2 + 3 ) ) , ((2+3)), ((2+3)),((a+b)) :<<EOF here document {1…10} 等价于seq 1 10,{1…10…2},三个数分别是{start…end…step} () 命令组,子shell中执行 {} 代码块,当前shell中执行
6. 变量操作
6.1 数字型
- 通过expr,expr 2 + 3,注意中间用空格隔开,否则输出字符串
- 使用其他程序,比如awk。i=2;j=3;echo “$i $j” | awk ‘END {print 2+3;print $1+$2}’
- i=1;((i=i+1));echo $i 推荐方式
- let x=2+3;echo $x
- Declare -i
6.2 字符串
- 使用expr,expr substr ”xxxxx“ 1 3
- 使用程序处理sed,awk,cut,tr等
- 变量自身扩展echo ${var:1:3}
6.3 变量定义扩展
语法 | 含义 |
---|---|
${value-default},${value:-default} | 当变量未定义或者值为空时,返回值default,否则返回变量的值 |
${value:=default} | 与前者类似,只是若变量未定义或为空,在返回default的同时将default复制给value,此步骤会改变参数的值 |
${value:?message} | 若变量已赋值,正常替换,否则将message送到标准错误输出,如果在shell程序中,程序将终止 |
${value:+word} | 若变量已赋值,才用word替换,否则不进行任何替换 |
6.4 变量值操作
语法 | 含义 |
---|---|
${value:offset},${value:offset:length} | 从变量提取字串,这里offset和length可以是算术表达式 |
${#value},${#array[*]},${#array[@]} | 变量的字符个数,数组变量的个数 |
${value#pattern},${value##pattern} | 掐头,去掉头部匹配的部分一个最短模式,一个最长模式 |
${value%pattern},${value%%pattern} | 去尾,去掉尾部匹配的部分一个最短模式,一个最长模式 |
${value/pattern/string} | 替换,pattern部分替换为string,替换第一个,支持*和? |
${value//pattern/string} | 全局替换,pattern部分替换为string,替换全部 |
${value/#pattern/replacement} | 前缀替换,pattern部分替换为string |
${value/%pattern/replacement} | 后缀替换,pattern部分替换为string |