
Linux提供的Shell解析器有

Ubuntu默认:

Shell脚本入门
脚本以**#!/bin/bash**开头(指定解析器)
qs:~$ vim helloworld.sh
在helloworld.sh中输入如下内容
#!/bin/bash
echo"Hello shell!"
运行方式:
- 1. sh/bash + 路径 如
sh ./helloworld.sh、bash ./helloworld.sh - 2. 直接运行脚本,先赋予执行权限
chmod +x helloworld.sh,然后直接执行./helloworld.sh
变量
常用系统变量
PATH、HOME、PWD、SHELL、USER等
获取变量的值
语法:$变量名
$和变量名之间不能有空格。

显示当前Shell中所有变量:set
自定义变量
(1)定义变量:变量名=变量值,注意,=号前后不能有空格。
(2)撤销变量:unset 变量名。
(3)声明静态变量:readonly变量,注意:不能重新赋值,不能unset。
(4)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
(5)变量的值如果有空格,需要使用双引号或单引号括起来。
(6)最右侧分号可有可无,一般都不写


注意:变量默认类型都是字符串类型,无法直接进行数值运算


可把变量提升为全局环境变量,可供其他Shell程序使用
语法:export 变量名
在helloworld.sh文件中增加echo $B。
#!/bin/bash
echo"helloworld"
echo$B
执行
atguigu@ubuntu:~$ B=3
atguigu@ubuntu:~$ ./helloworld.sh
发现并没有打印输出变量B的值
atguigu@ubuntu:~$ export B
atguigu@ubuntu:~$ ./helloworld.sh
helloworld
3
注意:必须在同一个窗口中运行测试(必须得是在同一个进程中)
特殊变量
(功能描述:n为数字,1-{10}。)
新建hello.sh
#! /bin/bash
echo'==========$n=========='
echo$0
echo$1
echo $

$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性。)。
建立脚本
#! /bin/bash
echo'==========$n=========='
echo$#

*把所有的参数看成一个整体。)
@把每个参数区分对待。)
(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

算术运算
$((运算式))或者$[运算式]

条件判断
基本语法
- • 写法2:
[ condition ](condition前后有空格)
注意:条件成立(数据非空)即为0(真),否则为1(假)
test atguigu返回0,test 返回1
[ atguigu ]返回0,[ ] 返回1。[ “” ]返回1


常用判断条件
[ ]中不能直接使用=、>、<等,(( )) 主要用于执行算术运算与条件判断。其内部能运用常见的 C 语言风格算术和比较运算符。
-eq 等于(equal) -ne 不等于(not equal)
-lt 小于(less than) -le 小于等于(less equal)
-gt 大于(greater than) -ge 大于等于(greater equal)

-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)

-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)

&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命

流程
if 判断
if [ 条件判断式 ]; then
程序
fi
#=======================
if [ 条件判断式 ]
then
程序
fi
#=======================
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
① [ 条件判断式 ]中括号和条件判断式之间必须有空格
② if后要有空格
#!/bin/bash
if [ $# -eq 0 ]
then
echo'请携带年龄'
elif [ $1 -lt 18 ]
then
echo'未成年人'
elif [ $1 -lt 60 ]
then
echo'成年人'
else
echo'老年人'
fi
###
atguigu@ubuntu:~$ chmod 777 if.sh
atguigu@ubuntu:~$ ./if.sh 12
未成年人
atguigu@ubuntu:~$ ./if.sh 34
成年人
atguigu@ubuntu:~$ ./if.sh 66
老年人
atguigu@ubuntu:~$ ./if.sh
请携带年龄
case
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
值2)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:
(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于C中的break。
(3)最后的“*)”表示默认模式,相当于C中的default。
#!/bin/bash
case$1in
"1")
echo"banzhang"
;;
2)
echo"cls"
;;
*)
echo"renyao"
;;
esac
for
for ((初始值;循环控制条件;变量变化))
do
程序
done
#!/bin/bash
sum=0
for((i=1;i<=100;i++))
do
sum=$[$sum+$i]
done
echo$sum
还有一种用法
for 变量 in 值1 值2 值3…
do
程序
done
#!/bin/bash
for i in cls mly wls
do
echo"ban zhang love $i"
done
while循环
while [ 条件判断式 ]
do
程序
done
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo$sum
read命令
读取终端输入到指定变量中
用法:read (选项) (参数)
选项:
-p:指定读取值时的提示符。
-t:指定读取值时等待的时间(秒)如果-t不加表示一直等待。
变量:指定读取值的变量名

函数
- • Shell命令是构成Shell脚本的基础单位,包括预定义的操作系统命令和外部工具。
- • Shell函数是用户自定义的代码块,用于封装复杂操作,提高代码的模块化和复用性。
- • 命令直接作用于Shell环境,而函数则是在Shell环境中定义并调用的,提供了更灵活的编程能力。
自定义函数
[ function ] funname[()] 注意只能省略其中一个
{
Action;
[return int;]
}
(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。
(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)。
#!/bin/bash
sum()
{
SUM=$[$1+$2]
echo$SUM
}
read -p "请输入第一个数值: " n1
read -p "请输入第二个数值: " n2
sum$n1$n2
