Shell
Shell 是啥哦
Shell是一个命令行解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序
Shell也是一个功能强大的编程语言,是一个解释执行的脚本语言,Shell中可以直接调用Linux系统语言
结构:
-> -> -> -> ->由内到外-> -> -> -> -> -> ->
| 硬件 | 内核 | Shell命令解释器 | 外层应用程序
从结构上可以看出,shell命令解释器就是将我们的命令,翻译成内核可以识别的东西
脚本示例
开头必须写声明:#!/bin/Bash
, 否则有时候会出问题
#!/bin/Bash
echo 'Welcome to Hiki-world!'
执行方法
赋予执行权限,直接运行
chmod 755 test.sh
./test.sh
通过Bash调用执行脚本
bash test.sh
执行Windows编辑出来的脚本
使用指令cat -A
可以查看文件的所有内容(包括换行),会发现在Windows上编辑的.sh脚本的换行符是 ^M$
, 但是Linux中的换行符为 $ ,所以执行的时候会失败,所以需要进行修改
yum -y install dos2unix
dos2unix test.sh
当然也有转换成window可以用的:
unix2dos test.sh
输出
echo [选项] [输出内容]
如果需要输出有空格的内容,则需要加引号,双引号和单引号是不一样的
-e
: 支持反斜杠控制的字符转换
Bash基本功能
1.历史命令history
默认保存1000条,可以再 /etc/profile
中修改
history [选项] [历史命令保存文件]
-c
: 清空历史记录-w
: 手动把缓存中的历史命令写入历史命令保存文件
历史命令保存在用户目录的 .bash_history
历史命令的调用
!n 重复执行第n条历史命令
!! 重复执行上一条命令
!字串 重复执行最后以该字串开头的明林
2.命令与文件补全
tab
按两次tab
3.别名与快捷键
别名
alias 别名=’原命令’
设定命令别名
alias vi='vim'
alias
查询命令别名
unalias
删除别名
想要别名永久生效要写到 /root/.bashrc
中
Bash常用快捷键
快捷键 | 作用 |
---|---|
ctrl + A | 光标移到命令行首 |
ctrl + E | 光标移到命令行尾 |
ctrl + C | 终止当前命令 |
ctrl + L | 清屏 |
ctrl + U | 剪切光标前命令 |
ctrl + K | 剪切光标后命令 |
ctrl + Y | 粘贴 |
ctrl + R | 搜索历史命令 |
ctrl + D | 退出终端 |
ctrl + Z | 暂停 |
ctrl + S | 暂停屏幕输出 |
ctrl + Q | 恢复屏幕输出 |
4.输入输出重定向
输出重定向
命令 > 文件 输出覆盖到文件中
命令 > 文件 输出追加到文件中
错误命令 2> 文件 把错误输出覆盖到文件
错误命令 2>> 文件 把错误输出追加到文件
命令 &> 文件 正确和错误输出都覆盖到文件中
命令 &>> 文件 正确和错误输出都追加到文件中
命令 >> 文件1 2>>文件2 正确的输出到1,错误的输出到2
ls &> /dev/null 全部丢到垃圾箱/dev/null
输入重定向
wc [选项][文件名]
-c
: 统计字节数-w
: 统计单词数-l
: 统计行数
命令 < 文件 文件中的东西输入到命令
5.多命令顺序执行与管道符
命令1;命令2 顺序执行多命令
命令1&&命令2 1执行正确才执行2
命令1||命令2 1不正确才执行2
管道符
命令1 | 命令2
命令1正确输出作为命令2的操作对象
6.通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意多个任意字符 |
[] | 匹配括号中的一个字符,[abc] 代表a 或 b 或 c |
[-] | [a-z] 匹配 a到z一个字符 |
[^] | [^0-9] 匹配不是数字的一个字符 |
7.特殊符号
符号 | 作用 |
---|---|
’’ | 单引号。在单引号中所有的特殊符号都没有含义 |
”” | 双引号,”$” :调用变量的值, “`“:引用命令 “\” :转义 |
$() | 引用系统命令 |
`` | 反引号,括起来的是系统命令,Bash会先执行它,和$()作用一样,推荐用$() |
# | #开头的行表示注释 |
$ | 调用变量的值,例如$name 调用变量name的值 |
\ | 转义符 |
变量
1.设置规则
- 不能以数字开头
- 默认为字符串类型,需要数值需要指定变量类型为数值型
- 设置变量的等号两边不能有空格(编程习惯加空格了)
2.查看删除
set 查看所有变量,建议用 set | less 不然看不到上面的变量了
unset name 删除指定变量
3.环境变量
设置环境变量
export 变量名=变量值
将本地变量声明为环境变量:
export 本地变量名
查询环境变量
env
删除环境变量
unset
4.子Shell
进入子Shell:
bash
可以通过进程数看看自己再哪个Shell里:
pstree
如果显示没有pstree,则安装一下:
yum -y install psmisc
5.Path
查看PATH
echo $PATH
和Windows中的环境变量PATH含义差不多应该,就是命令的位置,使用 :
分隔
增加PATH路径
PATH=${PATH}:路径
但是这样修改是临时的
6.PS1
定义系统提示符变量
位置参数变量
1.位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n为数字,$0表示命令本身,$1-$9代表第一到第九个参数,十以上用${10} |
$* | 表示命令行所有参数为一个整天 |
$@ | 表示命令行所有参数,不过区分对待(想成是一个数组就行了) |
$# | 表示命令行中所有参数的个数 |
所以这是什么鬼??好吧,后来看了下例子才明白,执行.sh脚本是可以带参数的。所以.sh可以说是一个函数
举例
脚本
vim test.sh
#!/bin/bash
echo 'Welcome to Hiki-world!'
echo "你执行了$0"
echo "Your name is $1"
echo "You are $2"
echo "You are $3 years old"
执行
./test.sh hiki man 18
结果
你执行了./test.sh
Your name is hiki
You are man
You are 18 years old
2.预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态,0说明上个命令正确,非零则不正确 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
$ | 将命令放入后台执行find /root -name hello.sh & |
接收键盘输入(提示变量)
read [选项][变量名]
-p “提示信息”
: 提示信息,再等待read输入时,输出提示信息-t 秒数
: read命令会等待用户输入,此选项指定等待时间-n 字符数
: read接收指定字符数就会执行-s
: 隐藏输入的数据,适用于机密信息的输入
例子:
脚本
1 #!/bin/bash
2 read -t 30 -p "Please input your name:" name
3 read -t 30 -p "Please input your age:" age
4 read -s -t 30 -p "Please input your password:" password
5 echo -en "\n"
6 echo "Hello ${name} , you are ${age} years old now!"
执行
# ./test2.sh
Please input your name:hiki
Please input your age:18
Please input your password:
Hello hiki , you are 18 years old now!
数值运算与运算符
1.声明变量类型
declare [+/-][选项] 变量名
-
: 设定类型属性+
: 取消类型属性-i
: 设置为整数integer-x
: 环境变量-p
: 显示变量被生平的类型
原本很疑惑,为什么 -
是设定,原来是因为本来选项就是 -
,所以 -
为设置,而相反的 +
为取消了
2.数值运算
方法一:
aa=11
bb=22
declare -i cc=$aa+$bb
方法二,expr或let数值运算工具
aa=11
bb=22
dd=$(expr $aa + $bb)
PS: +
符号前后有空格
方法三(推荐)
aa=11
bb=22
dd=$(( $aa+$bb ))
ee=$[ $aa+$bb ]
变量测试与内容替换
github: https://github.com/Hikiy
作者:Hiki
创建日期:2019.09.19
更新日期:2019.09.19
(转载本站文章请注明作者和出处 Hiki)