查看 Linux 中默认支持的 shell 类型:
/etc/shells
echo 输出命令
-e 支持反斜线控制的字符转换
控制字符 (需要加引号)
\\ | 输出 \ 本身 |
\a | 输出警告音 |
\b | 退格键,向左删除 |
\c | 取消输出末行的换行符,和 - n 一致 |
\e | ESCAPE 键 |
\f | 换页符 |
\n | 换行符 |
\r | 回车键 |
\t | 制表符,Tab 键 |
\v | 垂直制表符 |
\0 | 按八进制 ASCII 码输出字符,其中 0 为数字 |
\x | 按十六进制 ASCII 码输出字符 |
如: echo -e "a\tb\tc\nd\ne\nf\n"
echo -e "\e[1;31m abcdefgh\e[0m" 输出颜色
- #30m = 黑色; 31m = 红色; 32m = 绿色; 33m = 黄色
- #34m = 蓝色; 35m = 粉红; 36m = 青色; 37m = 白色
脚本执行的方式:
相对路径或绝对路径执行 (需要执行权限):./hello.sh /home/t/hello.sh
通过 bash 调用 (只需要读权限):bash hello.sh
Windows 下写的 shell 脚本无法在 Linux 执行:
是因为 windwos 下的回车符是 ^M$, 而 Linux 的回车符是 $
- rpm -q dos2unix #查看是否安装 dos2unix
- yum install -y dos2unix
- dos2unix filename
- # 反过来 unix2dos 可以把 Linux 下 shell 脚本转换为 windows 的哦
history 查看历史命令
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
alias 查询命令别名
alias 别名 = 原命令
unalias 删除别名
/root/.bashrc 使别名永久生效
命令执行顺序
执行用绝对路径或相对路径执行的命令
执行别名
执行 bash 内部命令
执行按照 $PATH 环境变量定义的目录查找顺序找到的第一个命令
bash 常用快捷键
ctrl + A | 把光标移动到命令行的开头 |
crol+ e | 把光标移动到命令行结尾 |
ctrl + c | 强制更改强制终止当前命令 |
ctrl + l | 清屏,相当于 clear |
ctrl - u | 删除或剪切光标之前的内容 |
ctrl + K | 删除或剪切光标之后的内容 |
ctrl + y | 粘贴 Ctrl+u 或 Ctrl+k 剪切的内容 |
ctrl + r | 在历史命令中搜索 |
ctrl + d | 退出当前终端 |
ctrl + z | 暂停,并放入后台 |
ctrl + s | 暂停屏幕输出 |
ctrl + q | 恢复屏幕输出 |
输出重定向
标准输出重定向 | 命令 & gt; 文件 | 以覆盖的方式,把命令的正确输出到指定文件或设备中 |
命令 & gt;> 文件 | 以追加的方式,把命令的错误输出到指定的文件或设备中 | |
标准错误输出重定向 | 错误命令 2> 文件 | 以覆盖的方式,把命令的错误输出到指定文件或设备中 |
错误命令 2> 文件 | 以追加的方式,把命令的错误输出到指定的文件或设备中 | |
正确输出和错误输出同时保存 | 命令 & gt; 文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存在同一文件 |
命令 & gt;> 文件 2>&1 | 以追加的方式,把正确输出和错误输出都保存在同一文件 | |
命令 & amp;> 文件 | 以覆盖的方式,把正确输出和错误输出都保存在同一文件 | |
命令 & amp;>> 文件 | 以追加的方式,把正确输出和错误输出都保存在同一文件 | |
命令 & gt;> 文件 1 2>> 文件 2 | 把正确的输出追加到文件 1 中,把错误的输出追加到文件 2 中 |
多命令顺序执行
; | 命令 1;命令 2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
&& | 命令 1&& 命令 2 | 逻辑与。当命令 1 正确执行,则命令 2 才会执行 |
|| | 命令 1|| 命令 2 | 逻辑或。当命令 1 执行错误,则命令 2 才会执行 |
例: 命令 && echo yes || echo no
命令 1 | 命令 2 管道符 (命令 1 的正确输出作为命令 2 的操作对象)
例: more /etc/passwd | grep "root"
通配符
? | 匹配一个任意字符 |
* | 匹配 0 个或多个任意字符,也可以匹配任何内容 |
[ ] | 匹配中括号中任意一个字符 |
[ - ] | 匹配中括号中任意一个字符,- 代表一个范围。 |
[ ^ ] | 逻辑非,表示匹配不是中括号内的一个字符。如:[^0-9] 代表匹配一个非数字字符 |
Bash 中其他特殊符号
‘’ | 在单引号中所有的特殊符号如 $ 和 `(反引号)都没有特殊含义 |
“” | 在双引号中特殊符号都没有特殊含义,但 $、`、\ 除外,拥有调用变量的值、引用命令和转义符的特殊含义 |
$() | 和 `(反引号) 作用一样。括起来的内容是系统命令,在 bash 中会先执行它 |
# | 在 shell 脚本中,# 代表注释 |
$ | 用于调用变量的值,如需要调用变量 name 的值时,需要用 $name 得到变量的值 |
\ | 转义符,在 \ 之后的特殊符号将失去特殊含义,变为普通字符。如 \$ 将输出 $,而不当变量引用 |
变量是计算机内存的单元, 其中存放的值可以改变当 shell 脚本需要保存一些信息时, 如一个文件名或 是一个数字, 就把他存放在一个变量中每个变量有一个命令, 所以就很容易引用它使用变量可以保存有用信息, 使系统获知用户相关设置, 变量也可以用户保存暂时信息
变量设置规则
变量名称可以由字母数字和下划线组成但是不能以数字开头
在 bash 中, 变量的默认类型都是字符串型, 如果要进行数值运算, 则必须指定变量类型为数值型
变量用等号连接值, 等号左右两侧不能有空格
变量的值如果有空格, 需要使用单引号或双引号包括
在变量的值中, 可以使用 \ 转义符
如果需要增加变量的值, 那么可以进行变量值叠加啊不过变量需要用双引号包含 $ 变量名或用 $ 变量名包含
如果是把命令的结果 作为变量值赋予变量, 则需要使用反引号或 $() 包含命令
环境变量名建议大写, 便于区分
变量分类
用户自定义变量
环境变量: 这种变量中主要保存的是和系统操作环境相关的数据
位置参数变量: 这种变量主要是用来向脚本当中传递参数或数据 的, 变量名不能自定义, 变量的作用是固定的
预定义变量: 是 bash 中已经定义好的变量变量名不能自定义, 变量的作用也是固定的
本地变量叠加
- abc="blog" #定义变量
- abc="$abc"int6
- abc=${abc}cn
- [root@centos ~]# echo $abc #变量调用
- blogint6cn
- set #变量查看
- unset abc #变量删除
环境变量: 用户自定义变量只在当前 shell 中生效, 而环境变量会在当前 shell 和这个 shell 的所有子 shell 中生效如果把环境变量写入相应配置文件, 那么这个环境变量就会在所有 shell 中生效
设置环境变量
export 变量名 = 变量值 #申明环境变量
env #查询变量
unset 变量名 #删除变量
系统常见环境变量
PATH: 系统查找命令的路径
PATH="$PATH":/home/test/hello.sh
PS1: 定义系统提示符的变量
\d: 显示日期, 格式 星期 月 日
\h: 显示主机名
\t: 显示 24 小时制时间
\T: 显示 12 小时制时间
\A: 显示 24 小时制时间, 格式 HH:MM
\u: 显示当前用户名
\w: 显示当前所在目录的完整路径
\W: 显示当前所在目录的最后一个目录
\#: 执行的第几个命令
\$: 提示符 Root 用户为 #, 普通用户为 $
位置参数变量
$n | n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 $[10] |
$* | 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过 $@把每个参数区分对待 |
$# | 这个变量代表命令行中所有的参数的个数 |
例:[root@h ~ ]#vim calc.sh
- #!/bin/bash
- num1=$1
- num2=$2
- num3=$3
- sum=$(($num1+num2+num3))
- echo $sum
- [root@h ~ ]#./calc.sh 1 2 3
- 6
$* 与 $@的区别例子:
- [root@h ~ ]#vim test.sh
- #!/bin/bash
- for x in "$*"
- do
- echo $x
- done
- for y in "$@"
- do
- echo $y
- done
- [root@h ~ ]#./test.sh 11 22 33 44
- 11 22 33 44
- 11
- 22
- 33
- 44
预定义变量
$? | 最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体哪个数,由命令来决定),则证明上一个命令执行错误 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
例:[root@h a ]#ls -l
总用量 0
- [root@h a ]#echo $?
- 0
- [root@h a ]#error -l
bash: error: 未找到命令
- [root@h a ]#echo $?
- 127
例 2:[root@h ~ ]#vim test.sh
#!/bin/bash
echo 当前进程号是 $$
echo abcd &
echo 当前进程号是 $!
[root@h ~ ]#./test.sh
当前进程号是 2917
当前进程号是 2918
abcd
read 接收键盘输入
-p 提示信息 在等待 read 输入时, 输出提示信息
-t 秒数 read 命令会一直等待用户输入, 此选项指定等待时间
-n 字符数 read 命令只接受制定的字符数就会执行
-s 隐藏输入的数据, 用于机密信息输入
例:#!/bin/bash
- read -t 30 -p "请输入用户名:" id
- echo "输入的是 $id"
- read -s -p "请输入密码" password
- echo -e "\n"
- read -n 1 -p "请输入性别 [男 / 女]" gender
- echo -e "\n"
- echo "输入的是 $gender"
- [root@h ~ ]#./test.sh
请输入用户名: root
输入的是 root
请输入密码:
请输入性别 [男 / 女]: 男
输入的是男
数值运算与运算符
declare [+/-][选项] 变量名
-: 给变量设定类型属性
+: 取消变量的类型属性
-i: 将变量声明为整数型 (integer)
-x: 将变量生命为环境变量
-p: 显示指定变量的被声明的类型
例 1:[root@h ~ ]#aa=11
- [root@h ~ ]#bb=22
- [root@h ~ ]#cc=$aa+$bb
- [root@h ~ ]#echo $cc
- 11+22
- [root@h ~ ]#declare -i cc=$aa+$bb
- [root@h ~ ]#echo $cc
- 33
例 2:expr 或 let 数值运算
- [root@centos ~]# dd=$(expr $aa + $bb)
- [root@centos ~]# echo $dd
- 33
例 3:$((运算式)) 或 $[运算式]
- [root@centos ~]# ee=$(($aa+$bb))
- [root@centos ~]# echo $ee
- 33
运算符
优先级 | 运算符 | 说明 |
13 | -,+ | 单目负,单目正 |
12 | !,~ | 逻辑非,按位取反或补码 |
11 | *,/,% | 乘,除,取模 |
10 | +,- | 加,减 |
9 | <<, >> | 按位左移,按位右移 |
8 | <= , >= , < , > | 小于或等于,大于或等于,小于,大于 |
7 | == , != | 等于,不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按为或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =,+=,- =,*=,/=,%=,&=, ^=, |=,<<=,>>= | 赋值、运算并赋值 |
- aa=$((14%3)) #14 不能被 3 整除, 余数是 2
- aa=$((1&&0)) #逻辑与运算只有与的两边都是 1, 与的结果才是 1
- aa=$(((66+3)*3/2))# 小括号可以调整运算优先级
环境变量配置文件:
source 配置文件
或
. 配置文件
环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量, 比如 PATHHISTSIZEPS1HOSTNAME 等默认环境变量
环境变量配置文件
- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
/etc/profile 的作用
user 变量
LOGNAME 变量
MAIL 变量
PATH 变量
HOSTNAME 变量
HISTSIZE 变量
umask
调用 / etc/profile.d/*.sh
~/.bash_profile 的作用
调用~/.bashrc 文件
在 PATH 变量后面加入 $HOME/bin 这个目录
注销时生效的环境变量配置文件
~/.bash_logout
其他配置文件
~/.bash_history
shell 登录信息
本地终端欢迎信息:/etc/issue
转义符 | 作用 |
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\l | 显示 登陆的终端 |
\m | 显示硬件体系结构 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登录用户的序列号 |
远程终端欢迎信息:/etc/issue.net
转移符在 / etc/issue.net 文件中不能使用
是否显示此欢迎信息, 由 ssh 的配置文件 / etc/ssh/sshd_config 决定, 加入 Banner /etc/issue.net 行才能显示 (需要重启 ssh 服务)
登陆后显示欢迎信息 /etc/motd
不管是本地登录, 还是远程登录, 都可以显示欢迎信息
来源: http://www.bubuko.com/infodetail-2501235.html