文章目录
00 什么是Shell编程
- Shell编程是一种编写脚本的语言,可用于在Linux系统上执行自动化任务。
- Shell编程是通过编写一系列命令来控制计算机的工作流程。
- 它通常使用命令行界面(CLI)来与用户交互,并可以执行文件处理、文本处理、系统管理等任务。
01 Hello World!
下面是一个shell脚本内容,用于输出Hello World!
#!/bin/bash
echo "hello world!" # 我是一个注释
- shell脚本是一个文本文件,第一行固定书写
#!/bin/bash
,表示用于执行脚本的工具为bash - shell脚本中,注释使用
#
开头 - shell文件可以是任意后缀格式,建议以
.sh
结尾 - 可使用文本编辑器编辑脚本内容,例如
vim xxx.sh
02 Shell脚本的执行方式
2.1 设置可执行权限
shell脚本首次编辑完成后,需要为其赋予可执行权限,常用命令为:
chmod +x xxx.sh
表示给所有用户赋予该文件的可执行权限chmod u+x xxx.sh
表示给root用户赋予可执行权限
2.2 执行方式一(局部)
- sh+相对路径
sh ./hello.sh
- sh+绝对路径
sh /root/hello.sh
- bash+相对路径
bash ./hello.sh
- bash+绝对路径
bash /root/hello.sh
以下两种方式要求脚本文件需要有可执行权限 - 直接输入绝对路径执行
/root/hello.sh
- 直接输入相对路径执行
./hello.sh
2.3 执行方式二(全局)
source ./hello.sh
等价
. hello.sh
(.
后有空格)
2.4 修改环境变量设置为可直接执行
通常使用执行方式一中的第5或6的方式即可,即/root/hello.sh
或./hello.sh
。
如果想输入脚本名称就直接执行,将其当成命令一样使用,可以通过修改环境变量实现。
首先需要配置脚本目录,将所有想直接执行的脚本放在此目录下,然后修改$PATH
变量,在其后添加脚本所在路径即可。
或者直接将脚本拷贝到/root/bin
目录下即可。
03 变量
3.1 系统预定义变量
bash
开启子shell- 常用系统变量:
$HOME
当前的home目录$PWD
当前的工作目录$USER
当前用户
echo
查看环境变量env
查看全局环境变量ps -f
查看子shell情况set
查看所有变量
3.2 自定义变量
-
基本语法:
变量名=变量值
注意:=
两边不能有空格,变量值如果有空格需用双引号或单引号括起来 -
撤销变量:
unset 变量名
-
声明静态变量:
readonly 变量名=变量值
注意:静态变量不能unset撤销 -
将一个变量提升成全局变量:
export 变量名
注意:父shell全局变量影响子shell,但子shell全局变量不影响父shell -
查看变量值
echo $变量名
-
定义变量时进行运算:
a=$[1+2]
注意:环境变量名建议大写,bash中变量默认都是字符串类型,无法进行数值运算
3.3 特殊变量
$n
表示一个参数,其中n表示数字
$0
表示该脚本名称
$1-$9
表示第一至第九个参数
十以上的参数使用大括号:${10}
示例:
#!/bin/bash
echo "hello $1"
使用时:
./hello.sh Jam
# 输出:hello Jam
注意:使用双引号时,其中的$
符会被视为变量参数,使用单引号则视为普通字符
$#
获取输入参数的个数,常用于循环,判断参数个数是否正确以加强脚本健壮性
#!/bin/bash
echo $0
echo $1
echo $# # 会输出传入参数的个数
- 其他特殊变量
$*
命令行中所有的参数,将这些参数视为一个整体,类似数组[a, b, c],可遍历
$@
命令行中所有的参数,把每个参数区分对待
$?
最后一次执行的命令的返回状态,若该变量值为0表示上一个命令正确执行;若非0则表示上一个命令执行不正确,可直接在命令行中输入该命令查看结果
04 运算符
expr
命令
expr 1 + 2
返回数字3(注意空格)
加法:expr 1 + 2
减法:expr 5 - 2
乘法:expr 5 \* 2
- 简化运算符
$((运算式))
或 $[运算式]
例如:a=$[(2 + 3) * 4]
(运算式空格无严格要求,推荐该方式)
如果要将命令的结果视为值,使用$(表达式)
写法 或 使用反引号 ``包裹
例如 a=$(expr 5 \* 2)
或 a=`expr 5 * 2`
案例
#!/bin/bash
sum=$[$1 + $2]
echo sum=$sum
05 获取用户台输入
基本语法:
read -t 秒数 -p "提示信息" 变量名
-t
表示要等待的秒数,如果到期仍未输入会自动结束
-p
表示提示信息
变量名
表示输入的内容要保存的变量名
#!/bin/bash
# 获取用户输入,设置等待10秒(不设置-t表示一直等待),保存变量名为name
read -t 10 -p "请输入您的名字:" name
echo "hello $name"