本机Linux版本:Ubuntu 18.04
概念
Shell:命令行界面(DOS是其中的一种)
Bash(Bourne Again Shell):Linux/Unix系统默认的Shell
Shell脚本:将Shell命令集合起来变成的批处理文件
小知识:Shebang 用sharp称呼“#”,用bang来称呼“!”,所以shebang=#!
Shell的提示符:
username@hostname $
root@hostname #
$
代表普通用户,#
代表管理员用户,在普通用户命令前加sudo
可以得到管理员用户的效果
在$
前加上~
变成~$
表示主目录,本机主目录为/home/user
Shell的两种脚本运行方式:
- 将脚本作为bash的命令行参数
bash script.sh # 假设脚本位于当前目录下
bash /home/seco/script.sh # 使用完整路径
- 授予脚本可执行权限,在进行执行
(1)要在脚本开头添加代码用来标识bash的解释器路径
#!/bin/bash
(2)授予脚本可执行权限
chmod a+x script.sh
(3)执行脚本
./script.sh # ’./‘表示当前目录
/home/seco/script.sh # 使用完整路径
分隔符与注释
cmd1 ; cmd2
cmd1 # 此为注释,注释之后的一整行
终端打印 echo
默认换行
echo "hello world !"
echo 'hello world !'
echo hello world !
该方法不能将分号输出(命令分隔符),并且该方法不能打印以’'开头的转义字符
参数:echo -parameter
- n:取消结尾添加换行符
- e:启用’'开头的转义字符,包括颜色
- E:关闭转义字符
- 参数可以连起来用,例如 ne
终端打印printf
默认不换行,与C语言类似
printf "hello world"
printf "%s %c %d %f\n" hehe h 1 1.2 #格式替换符
%-5s
指明向左对齐宽度为5的字符串
%5s
向右对齐
%-4.2f
向左对齐保留两位小数
打印彩色输出
echo -e “\e[字背景颜色;字体颜色m字符串\e[0m” \e[0m将颜色置回
例:echo -e "\e[1;42m This is red \e[0m
变量
脚本语言不需要声明变量类型
在bash中,变量的值都是字符串
变量赋值:变量名=变量值
(变量值包含空白字符需要加引号)
注:var = value 与 var=value不同,前者表示判断相等操作
在变量名加前缀就$可以打印出变量内容
echo $var
或 echo ${var}
使用单引号时,变量名不会被扩展
echo ‘$var’
只会打印$var
变量的长度:length=${#var}
环境变量
环境变量:未在当前变量中定义,而从父进程继承而来的变量(系统有默认继承变量)
查看进程运行的环境变量:
cat /proc/PID/environ # PID表示进程号
这样的结果是一堆“变量=值的”信息,可用tr命令将输出格式化
cat /proc/PID/environ | tr '\0' '\n'
设置环境变量 a=1;export a
:从当前脚本往后执行的任何应用程序都会继承这个变量
默认环境变量PATH
PATH包含很多目录,目录之间用冒号分隔
当输入索要执行的命令后,Shell会在PATH包含的所有目录查找对应的可执行文件
如果需要在PATH中添加一条路径,则可使用:
export PATH="$PATH:目录"
或 PATH="$PATH:/home/seco/hehe";export PATH
还有一些默认环境变量:HOME、PWD、USER、UID、SHELL
SHELL能知道当前的shell解释器地址(与0相同)
UID表示当前的用户(0表示root用户)
可以通过修改~./bashrc 中的PS1来修改命令提示符
退出状态码
每当命令执行完成后,系统都会返回一个退出状态。该退出状态用一个整数值表示,用于判断命令运行的正确与否
最后一次执行命令的退出状态值被保存在内置变量“?”中,所以,可以通过echo $?
语句测试命令是否运行成功。
退出状态 0 表示正常执行,其他非零的状态码均表示失败。
另外在判断条件时可能会返回1
状态码 | 描述 |
---|---|
0 | 命令返回成功 |
1 | 一般性未知错误 |
2 | 不适合的shell命令(错误的shell命令) |
126 | 找到了该命令但无法执行 |
127 | 没找到命令 |
128 | 无效的退出参数 |
128+x | 与Linux信号x相关的严重错误 |
130 | 通过Ctrl+C终止的命令 |
255 | 正常范围之外的退出状态码 |