4.1 shell内建命令
- type 查看命令是不是内建命令
- “ . ”(点号)
点号用于执行某个脚本,没有加执行权限也可以运行:
. ./hello.sh
与点号类似,source命令也可读取并执行脚本 - alias 别名
创建命令别名:alias myshoutdown=‘shoutdown -h now’
为了确保永久生效,可以将该条目写到用户家目录中的 .baserc文件中 - 删除别名: unalias 命名别名
- 改变目录:cd 不加参数的话,默认进入当前用户的家目录。
- 打印字符:echo
echo "hello world"
echo -n "hello world"
- break n 跳出几层循环
- continue n
- eval 将所跟的参数作为shell的输入,并执行产生的命令。
- export 在当前shell中暴露变量
- let 是shell内建的整数运算命令
let I=3+4 - local 声明局部变量
- read 从标准输入读取一行到变量
4.2 变量
- 变量
example:
name=jack
name="jack"
变量取值:
echo $name
echo ${name}
取消变量:
unset name
取消函数:
unset 函数名
- 特殊变量
1 位置参数:
$0
$1
$n
参数个数大于9时要用{}括起来:${10}
$# 表示脚本参数的个数综合
$@或者$* 表示脚本的所有参数
2 脚本或者命令返回值: $?
$? 永远是上一个命令的返回值
- 数组
1 数组定义:
declare -a Array
赋值:
Array[0]=0
Array[1]="helloworld"
更简单的创建数组方法:
Name=('jack' 'life')
2 数组操作
取数组元素: ${数组名[索引]}
echo ${Name[1]}
数组所有元素: ${Name[*]}或者 ${Name[@]}
数组长度: ${#Name[@]}或者 ${#Name[*]}
- 变量的作用域
linux中函数内的变量也会影响脚本中函数为定义的同名全局变量,可以通过在函数内声明为 local 变量来解决:
fun ch_var() {
local VAR=200
}
- 转义和引用
1 shell中的转义字符是反斜杠 '\'
2 引用是指将字符串用某种符号括起来,shell中一共有4种引用:单引号、双引号、反引号、和转义符
3 部分引用:
用双引号括起来的引用, $符、反引号、转义符这三种依然被解析成特殊意义
4 全引用:
单引号括起来的任何字符都只当做普通字符,单引号中间无法再包含单引号。
比如:echo '$VAR03'
输出结果: $VAR03
- 命令替换
命令替换是指将命令的标准输出作为值赋给某个变量。两种方式可以实现:
1. 反引号 ``
使用方法: `命令`
2. $()
使用方法: $(命令)
例子:DATE_01=`date`
DATE_02=$(date)
echo $DATE_01
echo $DAte_02
3. 如果被引用的命令输出内容包括多行,不通过引用的方式输出变量的话,输出内容的换行符会被删除,输出内容只占一行。
例子: LS=`ls -l`
不引用变量值输出: echo $LS
引用: echo "$LS"
4. 使用反引号的都可以使用$()代替,但是$()支持嵌套,反引号不行,$()只在Bash Shell中有效,反引号在多种UNIXshell中可以使用。
- 运算符
1. 算术运算符 + - * /
例子:let "value=2+3"
echo $value
2. 位运算符
3.$[]
例子:echo $[1+1]
4. expr
例子:expr 1 + 1
要求操作数和操作符之前使用空格隔开,特殊字符需要使用转义
5. 算术扩展 $((表达式))
例子:i=2
echo $((2*i+1))
6. bc运算
直接输入bc,回车进入bc交互界面
- 特殊字符
1. 通配
例子: a* 通配以a开头的字符串,不包括点号和斜线号;
?可以通配任何一个单一字符
[]可以通配其中任意一个字符 [abc]代表匹配a或者b或者c