shell是一个命令行解释器,为用户提供了项Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序。
shell脚本的注意事项:
- 脚本以 #!/bin/bush 开头(默认规范)
- 脚本要有执行的权限
- shell脚本文件,以.sh结尾(默认规范)
脚本的执行方式:
- 脚本默认没有执行权限,需要先添加执行权限,然后再执行文件
- 使用 sh 脚本名 直接执行文件(可以不用给与权限)
第一种方式:
vim 创建一个文件并添加以下代码:
查看权限,并分配权限 :
运行:
第二种方式:
shell的变量
环境变量:
存储有关 shell 会话和工作环境的信息(这也是它们被称作环境变量的原因)。这项特性允许你在内存中存储数据,以程序或shell中运行的脚本能够轻松访问到它们。
bash shell 环境变量分为:
- 全局变量
- 局部变量
系统的全局变量基本全用大写字母
env 或printevn 显示全局变量
注意:筛选时使用 printevn
set 显示shell中的变量
Shell中变量的定义:
- 定义变量: 变量=值(变量一般为大写)
- 删除变量: unset 变量
- 静态变量: readonly 变量
- 输出变量:$变量
注意:静态变量不能用unset删除
shell的输出方式:
- echo A=$A
- echo "A=$A"
shell变量的定义规则:
- 变量由字母,数字,下划线组成,不能以数字开头
- 等号两侧不能有空格
- 变量名称一般为大写
将命令的返回值赋值给变量:
- 使用 '命令 ' A='date' 把date的结果赋值给A
- 使用 $(命令) A=$(date) 把date的结果赋值给A
shell 的注释方式:
- 单行 #
- 多行 :<<! !
设置全局环境变量:
export 变量 (使变量成为全局环境变量)
在一个脚本文件中输入:
直接在脚本内输出是可以直接输出的,但直接用指令输出由于系统还没让配置立即生效,需要先把配置立即生效才能使用。
source 配置文件 (让配置立即生效)
注意:修改子shell中的全局变量并不会修改父shell中的全局变量(未直接修改脚本文件)
设置PATH环境变量:
PATH环境变量定义了用于进行命令和程序查找的目录
添加PATH环境变量:这种设置是临时的,重启消失
PATH=$PATH:路径
启动bash shell的3种方式:
- 登录时作为默认登录shell
- 作为非登录shell的交互式shell
- 作为脚本运行脚本的非交互式shell
1.bash shell 作为登录shell时,需要启动的命令
/etc/profile 是bash shell默认的的主启动文件 $HOME/bash_profile $HOME/.bashrc $HOME/.bash_logn $HOME/.profile
- $HOME目录下的启动文件 (带点号,隐藏文件)
- $HOME/.bash_profile
- $HOME/.bashrc 该文件一般通过其他文件运行
- $HOME/.bash_login
- $HOME/.profile
2.交互式shell进程
bash shell 不是登录系统时启动,而是命令行启动的,这种为交互式shell。
bash 是作为shell启动的,不会访问/etc/profile 而是检查 HOME中的 .bashrc 文件
- 查看/etc目录下通用的bashrc文件,
- 为用户提供一个定制自己的命令别名和私有脚本函数。
3.非交互式shell进程
系统执行shell脚本时用的就是这种shell,这种方式没有命令提示符。
bash shell提供了BASH_ENV环境变量。当shell启动一个非交互式shell进程时,它会检查这个环境变量来查看要执行的启动文件。如果有指定的文件,shell会执行该文件里的命令,这通常包括shell脚本变量设置。
环境变量持久化
把变量放在 启动文件 /etc/profile 中(但会随着版本更新而改变)
最好创建一个脚本文件 ,把全局变量放在 /etc/profile/init.d 目录中
大部分版本,存储个人用户永久性bash shell 变量的地方是$HOME/.bashrc文件
数组变量
创建格式为: 变量名=(数据1 数据2 ...)
输出格式为:
-
${变量名[x]} x为索引值
-
${变量名[*]} 输出全部
删除变量:
- unset 变量名[x] x为索引值
注意事项:
- 索引值从0开始
- 删除数组值是,只是删除该位置的值,该索引未被删除
- 数组变量移植性不好,一般很少用到
例如:在一个脚本文件中输入以下代码
运行结果:
> 输出重定向
command > outputfile 向将命令的输出发送到一个文件中
注意:如果该文件由数据,则据覆盖已有文件
< 输入重定向
wc 对数据中的文本进行计数
数据解释: 行数 词数 字节数
| 管道 (简单的讲:先执行前面,然后把数据再给后面执行)
数学运算符
expr 用来处理数学表达式
方括号 或者括号
可以直接在方括号进行数学运算
注意:bash shell数学运算符只支持整数运算
bc 内建的bash计算器,可以用来计算浮点数
计算过程:
bc在脚本中的使用(可以赋值)
格式为 变量 = $( echo "scale=x; 运算表达式 " | bc)