目录
一、Shell脚本初识
1、编写Shell脚本文件test.sh
(1)Shell脚本文件命名
文件名.sh
.sh是linux下bash shell的默认后缀。
(2)Shell脚本文件第一行
文件第一行必须为:#!/bin/bash
#!用来声明脚本由什么shell解析
(3)查看自己的linux系统的默认解析器
终端输入命令:echo $SHELL
(4)注释
单个"#"号代表注释当前行
(5)Shell种类
Linux中默认的shell是 bash。其他流行的shell包括:sh(UNIX 上的标准 shell)、ash、ksh、csh、tcsh(csh的增强版)、zsh等。
(6)切换系统Shell
从bash切换到csh: 在命令行输入csh。
从csh切换到bash: 在命令行输入bash。
bash和csh在语法或功能上存在差异,本文内容均是基于bash编写的,所以部分内容不适用于csh。
2、给Shell脚本文件加上可执行权限
chmod +x test.sh
3、执行(三种执行方式)
(1)./test.sh
先按照test.sh中#!指定的解析器解析,如果指定的解析器不存在,则使用系统默认的解析器。
(2)bash test.sh
先用bash解析器解析,如果bash解析器不存在,则使用系统默认的解析器。
(3). test.sh
直接使用系统默认的解析器解析,即不会执行第一行的#!指定的解析器。
二、变量分类
1、用户自定义变量
2、Linux环境变量
3、特殊变量
三、用户自定义变量
1、定义变量
变量名=变量值。注:=前后不能有空格
2、引用变量
$变量名
3、清除变量
unset 变量名
四、Linux环境变量
1、查看环境变量
(1)env命令
env命令可以查看当前用户全部的环境变量。
(2)echo命令
命令格式:echo $环境变量名
echo命令的选项-n:表示输出文字后不换行
2、常用的环境变量
(1)PATH
PATH指明了可执行程序的搜索目录。可执行程序包括Linux系统命令和用户的应用程序。
(2)HOME
HOME指明了用户家目录。
3、设置环境变量
(1)设置系统环境变量
系统环境变量是公共的,对全部的用户都生效。
(2)设置用户环境变量
用户环境变量是用户私有的、自定义的个性化设置,只对该用户生效。
针对bash的用户环境变量可在~/目录下的.bashrc文件和.bashrc_profile文件中配置;针对csh的用户环境变量可在~/目录下的.cshrc.user文件中配置。
相关的配置方法可参考https://blog.csdn.net/qq_42922513/article/details/130767986
五、特殊变量
1、$#
传给Shell脚本参数的数量;
2、$*
传给Shell脚本参数的内容;
3、$n
$1, $2, $3,等等。指运行Shell脚本时传递的参数;传递参数时需要用空格隔开;
4、$?
最后一次执行命令的返回状态。如果上一个命令正确执行,这个变量的值为0;如果上一个命令执行不正确,这个变量的值为非0(具体是哪个数,由命令本身决定)。
六、条件判断
1、基本语法
(1)test condition
举例:test $a = hello
(2)[ condition ]
condition前后要有空格。举例:[ $a = hello ]
2、常用判断条件
(1)比较两个整数的大小
-eq:等于(equal);
-ne:不等于(not equal);
-lt:小于(less than);
-le:小于等于(less equal);
-gt:大于(greater than);
-ge:大于等于(greater equal);
(2)判断文件权限
-r:有可读权限(read);
-w:有可写权限(write);
-x:有可执行权限(execute);
(3)判断文件类型
-e:文件存在(existence);
-f:文件存在且是一个常规的文件(file);
-d:文件存在且是一个目录(directory);
(4)多条件判断
&&:前一个命令执行成功时,才执行后一条命令,不能在 [] 中使用;
||:前一个命令执行失败时,才执行下一条命令,不能在 [] 中使用;
-a:即all,功能同&&,示例:[ $age -gt 18 -a $age -lt 35 ];
-o:即or,功能同||,示例:[ $age -gt 18 -o $age -lt 35 ];
[ … ] && … || … 其实就是if…else…语句。
七、流程控制
1、if语句
#if语句格式
if [ 条件判断式 ];then #若将多个命令在一行书写,用分号“;” 将各命令隔开
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
2、case语句
#case语句
case $变量名 in #case行尾必须为单词"in"
“值1”) #每个模式必须以右括号“)”结束
程序1
;; #双分号“;;”表示命令序列结束
“值2”)
程序2
;;
“值3”)
程序3
;;
*) #*)表示默认模式
默认程序
;;
esac
3、for语句
#for语句
for (( 初始值; 循环控制条件; 变量变化)) #双小括号(( ))中就可以直接使用数学中的运算表达式,如:<=
do
程序
done
4、while语句
#while语句
while [ 条件表达式 ]
do
程序
done
八、read读取输入
1、格式
read (选项)(参数)
(1)选项
-p:指定读取值时的提示符
-t:读取超时时间(超时退出)
(2)参数
变量:指定接收读取值的变量名