Linux: Shell

2019/09/19

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 ]

变量测试与内容替换

img





github: https://github.com/Hikiy
作者:Hiki
创建日期:2019.09.19
更新日期:2019.09.19

(转载本站文章请注明作者和出处 Hiki

Post Directory