Shell 脚本基础学习

Shell 做为Linux服务端的脚本,其可以实现强大的功能和充分利用机器完成更多的事情

什么是Shell ?

Q :为什么在打入ls后看到目录信息?
A :我们输入的其实是ASIIN码,大家都知道计算机是只理解2进制码的,所以只有通过一种转换让机器认识我们在说什么, 这个时候就需要通过Shell翻译了。

Shell就是我们的命令解释器,他负责接受我们的命令,解释后给Linux内核执行

什么是Shell脚本 ?

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

简单来说,就与Windows的Bat批处理相似

Shell脚本运行方式 ?

Shell脚本有两种运行方式

  • 通过赋予 x 可执行权限,直接运行
  • 通过bash 命令,加上脚本地址运行

PS : shell 在windows 下编写的脚本存在编码问题,由于windows在换行时多加了\r,所以在linux中会导致出错 , 我们可以通过Linux软件来直接解决这个问题
dos2unix cwj95.sh 将dos下shell转为unix下的

Shell命令执行顺序

1、 第一顺位 : 用 绝对 或相对 路径 的命令
2、 第二顺位 : 执行别命
3、 第三顺位 : Bash的内部命令
4、 第四顺位 : $PATH 环境下的命令

Bash常用快捷键

快捷键 命令
Ctrl + A/E 光标移动到 开头/结尾
Ctrl + C 强制终止当前命令
Ctrl + L 清屏,相当于 clear 命令
Ctrl + U 删除或剪切光标之前的命令
Ctrl + K 删除或剪切光标之后的命令
Ctrl + Y 粘贴剪切内容
Ctrl + R 在历史命令中搜索
Ctrl + D 退出当前终端
Ctrl + Z 暂停,并放入后台
Ctrl + S 暂停屏幕输出
Ctrl + Q 恢复屏幕输出

Bash通配符 和 特殊字符

通配符

  • * 0个或多个通配符
  • ? 1个任意字符
  • [abc] 中括号里的任何其中一个字符
    1. * [:space:] 表示一个空格
    2. [:punct:] 所有标点符号
    3. [:lower:] 所有小写字母
    4. [:upper:] 大写字母
    5. [:digit:] 数字
    6. [:alnum:] 所有大小写字母和数字
    7. man 7 glob 可以得到以上所有信息
  • [a-z] a 到 z 的范围中的任意一个字符

特殊字符

  • ‘ ’ 单引号,直接输出原义
  • “ ” 双引号,翻译特殊转义字符
  • ` ` 反引号,需要运行的系统命令,会先被执行
  • $ ( ) 与上面功能一致,但是结构清晰,所以推荐使用
  • # 井号,表示这是一行注释
  • $ 美元符号, 在shell中可以引用变量
  • \ 反斜线, 取消字符特定含义

Shell 脚本变量规则

  1. 由字母、数字和下划线组成
  2. 变量名不能以数字开头
  3. 变量的默认类型 是 字符串类型,要运算,必须先改变其类型
  4. 变量前后用等号连接, 如 : name=cwj95
  5. 变量值有空格时,用引号包含 , 如 : name=”Cwj 95″
  6.  使用时${name}或$name , 推荐都使用前一种
  7. 环境变量名建议大写,便于区分

Shell 脚本变量分类

  1. 用户定义变量 :用户定义的
  2. 环境变量 :环境相关变量
  3. 位置变量 : 主要是向脚本传递的变量,不能自定义, 作用固定
    4. 预订义变量 : Bash中已定义好的变量,不能自定义,作用固定

1. 用户变量 :

name=cwj95 定义变量set 查看所有变量unset name 删除变量

2. 环境变量:

自定义:会在当前Shell和子Shell生效
写入配置文件:全部的Shell生效

bash 开启一个新的命令行pstree 可以打印进程树

通过上面两个命令,我们就可以查看到我们的Shell其中的关系

export 变量名=变量值 , 申明自定义环境变量env 查询环境变量unset name 删除变量

环境变量配置文件:

该文件中主要是定义对系统的默认环境变量,比如 PATH、HISTSIZE\PS1等

source 配置文件 或 . 配置文件 : 重新加载配置文件

PS:一般需要重新登录才生效,输入命令可以直接重新加载

环境变量有以下5个文件,其中~是针对个别用户修改,(隐藏文件使用 . 开头)

  1. /etc/profile
  2. /etc/profile.d/*.sh
  3. ~/.bash_profile
  4. ~/.bashrc
  5. /etc/bashrc

我们可以看一下登录的时候配置文件执行流程 (网上找的图)

在Centos 7 中,已经不存在i18n这个文件了,查看lang.sh可以发现

**CentOS 7 中,需要通过这个文件 /etc/locale.conf 才能改变系统语言 **

3. 位置变量:

位置变量是由Shell脚本使用者传入的变量,这些变量可以在Shell脚本中直接使用的

位置符号 功能说明
$n 表示传入的变量,从0开始,0代表原命令,而后依次表示其参数
$# 代表参数的个数
$* 代表整合的参数部分,参数合成的字符串
$@ 分块表示脚本参数的内容,for可以打印得到每一个

4. 预定义变量:

由系统保留和维护的一组特殊的变量,这些变量通常用于保存程序运行状态等

预定义变量 功能说明
$? 上个命令是否执行成功,成功就为0,不然就是非0
$$ 当前进程号(PID)
$! 后台运行最后一个进程的进程号(PID)

接受键盘输入

read [选项] [变量名]

选项

  • -p 提示信息
  • -t 等待秒数
  • -n 只接收的字符数,当数量够后自动执行
  • -s 隐藏输入数据,以免相关信息暴露

Shell 脚本进行数值运算

首页我们学习一下declare的用法

declare [+/-] [选项] 变量名

  • – : 给变量设定类型属性
  • + : 取消变量类型属性
  • -i : 将变量声明为整型
  • -x : 将变量声明为环境变量
  • -p : 显示变量被声明的类型

有三种方式进行:

  1. vaule=$(( 11+22 )) 使用双小括号包裹,推荐
  2. declare -i value=11+22 声明类型为整形
  3. value=$(expr 11+22) expr数值运算工具

变量测试与赋值

变量置换方式 变量 Y 没有设置 变量 Y 为空值 变量 Y 的设置值
x=${y-新值} x=新值 x为空 x=$y
x=${y:-新值} x=新值 x=新值 x=$y
x=${y+新值} x=为空 x=新值 x=新值
x=${y:+新值} x=为空 x=为空 x=新值
x=${y=新值} x=新值=y x=为空,y=新值 x=$y,y值不变
x=${y:=新值} x=新值=y x=新值=y x=$y,y值不变
x=${y?新值} 新值输出到屏幕 x=为空 x=$y
x=${y:?新值} 新值输出到屏幕 新值输出到屏幕 x=$y

Linux 欢迎信息

登陆系统前显示的欢迎信息 :

/etc/issue(本地终端登录时显示) , /etc/issue.net (远程登陆时显示 , 不支持转义字符)
远程是否显示 , 还要看 /etc/ssh/sshd_config 的 Banner 字段
默认是none, 打开 Banner /etc/issue.net ,然后重启

/etc/motd ( 终端登录后显示此文件 , 不管远程还是本地 )
我们可以发现,类似阿里云的镜像都使用此文件提示Welcome to Alibaba Cloud Elastic Compute Service ! 阿里提示文本

特殊字符 涵义
\d 本地端时间的日期
\l 显示第几个终端机的接口;
\m 显示硬件的等级(i386/i486/i586/i686….)
\n 显示主机的网络名称
\o 显示 domain name
\r 操作系统的版本 (类似 uname-r)
\t 显示本地端时间的时间
\s 操作系统的名称
\v 操作系统的版本

发表评论

发表评论

*

沙发空缺中,还不快抢~