辉语:之前聊了很多关于Linux中的内容,今天我们继续跟大家分享一下Linux中非常重要的知识点:shell脚本的编写。今天,我们就一起来了解一下shell脚本。
编写简单shell脚本
shell是什么呢?
命令行是基于文本的接口,可用于向计算机系统输入指令。
Linux命令行由shell提供!
Bash是Linux系统中最成功的shell。
shell脚本是什么呢?
shell脚本最简单的形式是一个可执行文件,其中包含命令列表,还可以具有编程逻辑,以控制整个任务中的决策。
为什么使用shell脚本?
Linux命令被组合到shell脚本中,以轻松解决重复和困难的现实问题;
如果编写得当,则shell脚本本身就是功能强大的命令行工具,并且可以被其他脚本利用。
编写简单的bash脚本
shell中的特殊字符:
# :是注释符号
$ :是取变量的值
$( ) :是命令替换
‘ ‘ :是命令替换
许多字符在bash中有特殊的意义,如果想忽略这些含义,则使用引号和转义字符即可。\ :取消后面单个字符的特殊含义“ “ :转义shell扩展含义,不转义命令替换和变量的替换‘ ‘ : 可以转义单引号内部的所有字符含义
脚本的第一行以’#!’开头,通常称为sh-bang或shebang,这两个字符分别是sharp和bang,表示是一个解释型脚本。
vim shell1.sh
#! /bin/bash
echo laoma
执行脚本之前,必须赋予该文件执行权限:
chmod +x shell1.sh
然后执行该文件
/home/student/shell1.sh
bash变量/别名/算数扩展
普通变量
[declare] 变量名 = 变量值
变量类型:
-i integer
declare -i age=16
-l 所有字符转化为小写字母
-u 所有字符转化为大写字母
set命令:查看当前shell中的变量和函数!
如何取消一个变量的值呢?
unset 变量名
特殊变量
环境变量 environment
定义一个环境变量:
[declare -x] 环境变量名 = 值
或 export 环境变量名 = 值 (最常用的方式)
或 环境变量名=值;export 环境变量名
注意:普通变量和环境变量有什么区别呢?他们的作用区域不同,普通变量只能作用于当前shell中,而环境变量则适用于多个shell中。
例如:在一个shell中定义一个普通变量和一个环境变量;测试执行“bash”命令,则普通变量值不存在,而环境变量值存在!
env命令:查看当前shell中环境变量
取消定义使用:unset 环境变量名
shell特殊变量
$0 命令名或脚本名
$1 第1个参数名
$2 第2个参数名
$3 第3个参数名
….
$# 参数个数
$* 所有参数单做一个整体
$@ 每个参数当做独立的个体
$? 上一个命令的返回值
$! 上一个放在后台执行的命令的PID
shell初始化环境的文件
登录式shell:/etc/profile、~/.bash_profile、~/.bashrc、/etc/bashrc非登录式shell:~/.bashrc、/etc/bashrc
每个文件的含义如下:
/etc/profile:此文件为系统的每个用户设置环境信息,系统中每个用户登录时都要执行这个脚本,如果系统管理员希望某个设置对所有用户都生效,则可以写在这个脚本里。~/.bash_profile:每个用户都可使用该文件设置专用于自己的shell信息,当用户登录时,该文件仅执行一次。默认情况下,他设置一些环境变量,执行用户的.bashrc文件。~/.bashrc:该文件包含专用于自己的shell信息,当登录时以及每次新打开shell时,该文件被读取。/etc/bashrc:为每一个运行bash shell的用户执行此文件,当bash shell被打开时,该文件被读取。
bash别名
alias命令单独执行,可以查看当前shell环境中的命令别名。
alias别名:临时生效,在当前shell中执行alias命令
比如:alias hello=’echo hello’
hello 就会执行echo hello语句打印出hello
永久生效:编辑配置文件/etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc ;在以上配置文件中添加别名语句即可;.或者source 文件名;让配置文件汇总内容生效。
取消别名:unalias 别名;如果是永久生效,则将文件中命令删除即可!
bash算术扩展
例子:
echo $[1+!]
echo $[2*2]
echo $[5%2]
expr 5 % 2