shell学习笔记
- Shebang
- 脚本执行
- 数据类型
- shell脚本是弱类型语言,
- 特殊变量
- 引号
- 会话
- history
- 线程
- 环境变量
- 检查环境变量
- 基本内置命令
- echo
- eval
- exec
- 子串
Shebang
在windows中脚本为*.bat文件,Liunx脚本为*.sh文件。
#!/bin/sh程序执行时调用/bin/sh,即bash解释器。#!usr/bin/python调用python解释器。#!/usr/bin/env 解释器名称从环境变量中寻找解释器。
脚本执行
- 文件没有可执执行权限或未添加Shebang:
bash script.sh或sh script.sh。 - 文件有可执行权限:
./script.sh即以相对路径或绝对路径执行。 source script.sh或. script.sh两种方式等价。- 较少用的方式:
sh < script.sh将数据流写入sh或bash。
查看系统支持的解释器:
cat /tec/shells
查看sh路径:
echo $SHELL
数据类型
shell脚本是弱类型语言,
name="老王" # 变量后面不能有空格,且无需申明类型# 引用变量
echo $name
echo ${name}
特殊变量
# 参数变量
$0 #脚本文件名和脚本路径
$1...$n # 参数
$# # 参数个数
$* # 获取所有参数,将所有参数保存为一个整体
$@ # 获取所有参数,参数独立保存# 状态变量
$? # 上条命令是否执行成功
$$ # 当前脚本进程号
$! # 上次后台进程的PID
$_ # 上次命令的最后一个参数
引号
# 单引号不能识别特殊字符
name2='$name' # $name
# 双引号可以识别特殊字符
name3="$name" # 老王# 反引号,将代码的结果保存下来
name=`ls`
会话
history
# 查看历史命令
history
# 查看最大数量
echo $HISTSIZE
# 清空历史命令
history -c
# 恢复历史命令
history -r
# 调用历史记录命令 !+id
!3006
# 执行上次命令
!!
sudo !!
线程
# 开启子线程
bash
# 退出子线程
quit
# 查看线程数
pstree# bash执行命令会开启子线程
bash script.sh
# 使用source或者.则不会开启子线程
source script.sh
环境变量
检查环境变量
环境变量可以在shell中临时创建,退出即丢失,想永久生效,可以添加到配置文件中。
- 用户个人配置:
~/.bash_profile、~/.bashrc - 全局配置文件:
/etc/profile、/etc/bashrc
检查环境变量
- set 输出所有变量
- env 输出全局变量
- declare 输出所有变量,如同set
- export 显示和设置环境变量值
找到某个环境变量
export |gerp 变量名
- unset 变量名:删除变量或函数
- readonly:只读变量
基本内置命令
echo
-n 不换行输出
-e 解析字符串中的特殊字符
eval
执行多个命令
eval ls;cd www
exec
不创建子进程并执行后续命令,执行完程序后退出exit。
子串
${变量} # 变量值
${#变量} # 变量长度
${变量:start} # 从索引后截取子串,如${name:2}
${变量:start:length}
${变量#word} # 从变量开头删除最短匹配的word子串
${变量##word} # 删除最长匹配的word子串
${变量%word} # 从后向前删
${变量%%word}${变量/pattern/string}# string代替第一个pattern
${变量//pattern/string}# string代替所有的pattern