Linux-shell简单使用

Linux-shell简单使用

image-20260213162601487

Linux提供的Shell解析器有

image-20260213162637639

Ubuntu默认:

image-20260213162711744

Shell脚本入门

脚本以**#!/bin/bash**开头(指定解析器)

1
2
3
4
5
6
qs:~$ vim helloworld.sh

在helloworld.sh中输入如下内容

#!/bin/bash
echo "Hello shell!"

运行方式:

  1. sh/bash + 路径 如sh ./helloworld.shbash ./helloworld.sh
  2. 直接运行脚本,先赋予执行权限chmod +x helloworld.sh,然后直接执行./helloworld.sh

变量

常用系统变量

PATH、HOME、PWD、SHELL、USER等

获取变量的值

语法:$变量名

$和变量名之间不能有空格。

image-20260213163518090

显示当前Shell中所有变量:set

自定义变量

(1)定义变量:变量名=变量值,注意,**=号前后不能有空格**。

(2)撤销变量:unset 变量名。

(3)声明静态变量:readonly变量,注意:不能重新赋值,不能unset。

(4)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

(5)变量的值如果有空格,需要使用双引号或单引号括起来。

(6)最右侧分号可有可无,一般都不写

image-20260213164113349

image-20260213164315221

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

image-20260213164411981

image-20260213164725595

可把变量提升为全局环境变量,可供其他Shell程序使用

语法:export 变量名

在helloworld.sh文件中增加echo $B。

1
2
3
4
#!/bin/bash

echo "helloworld"
echo $B

执行

1
2
atguigu@ubuntu:~$ B=3
atguigu@ubuntu:~$ ./helloworld.sh

发现并没有打印输出变量B的值

1
2
3
4
5
atguigu@ubuntu:~$ export B
atguigu@ubuntu:~$ ./helloworld.sh
helloworld
3
注意:必须在同一个窗口中运行测试(必须得是在同一个进程中)

特殊变量

  • $n

(功能描述:n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}。)

新建hello.sh

1
2
3
4
5
#! /bin/bash
echo '==========$n=========='
echo $0
echo $1
echo $

image-20260213165944183

  • $#

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

建立脚本

1
2
3
#! /bin/bash
echo '==========$n=========='
echo $#

image-20260213170150734

  • $*、$@

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体。)

$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待。)

  • $?

(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

image-20260213170428619

算术运算

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

image-20260213170627431

条件判断

基本语法

  • 写法1:test condition

  • 写法2:[ condition ](condition前后有空格)

注意:条件成立(数据非空)即为0(真),否则为1(假)

test atguigu返回0,test 返回1

[ atguigu ]返回0,[ ] 返回1。[ “” ]返回1

image-20260213171313451

image-20260213171535189

常用判断条件

  • 比较数值

[ ]中不能直接使用=、>、<等,(( )) 主要用于执行算术运算与条件判断。其内部能运用常见的 C 语言风格算术和比较运算符。

-eq 等于(equal) -ne 不等于(not equal)

-lt 小于(less than) -le 小于等于(less equal)

-gt 大于(greater than) -ge 大于等于(greater equal)

image-20260213171630009

  • 按照文件权限判断

-r 有读的权限(read)

-w 有写的权限(write)

-x 有执行的权限(execute)

image-20260213172757564

  • 按照文件类型进行判断

-e 文件存在(existence)

-f 文件存在并且是一个常规的文件(file)

-d 文件存在并且是一个目录(directory)

image-20260213172829179

  • 多条件

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

image-20260213173126073

流程

if 判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
if [ 条件判断式 ]; then 
程序
fi

#=======================

if [ 条件判断式 ]
then
程序
fi

#=======================

if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi

① [ 条件判断式 ]中括号和条件判断式之间必须有空格

② if后要有空格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/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

1
2
3
4
5
6
7
8
9
10
11
12
case $变量名 in 
"值1"
如果变量的值等于值1,则执行程序1
;;
值2)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

注意事项:

(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。

(2)双分号“;;”表示命令序列结束,相当于C中的break。

(3)最后的“*)”表示默认模式,相当于C中的default。

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

case $1 in
"1")
    echo "banzhang"
;;
2)
    echo "cls"
;;
*)
    echo "renyao"
;;
esac

for

1
2
3
4
for ((初始值;循环控制条件;变量变化)) 
do
程序
done
1
2
3
4
5
6
7
8
#!/bin/bash

sum=0
for((i=1;i<=100;i++))
do
        sum=$[$sum+$i]
done
echo $sum

还有一种用法

1
2
3
4
for 变量 in 值1 值2 值3… 
do
程序
done
1
2
3
4
5
6
#!/bin/bash

for i in cls mly wls
do
      echo "ban zhang love $i"
done

while循环

1
2
3
4
while [ 条件判断式 ] 
do
程序
done
1
2
3
4
5
6
7
8
9
10
#!/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不加表示一直等待。

变量:指定读取值的变量名

image-20260213180431794

函数

  • Shell命令是构成Shell脚本的基础单位,包括预定义的操作系统命令和外部工具。

  • Shell函数是用户自定义的代码块,用于封装复杂操作,提高代码的模块化和复用性。

  • 命令直接作用于Shell环境,而函数则是在Shell环境中定义并调用的,提供了更灵活的编程能力。

自定义函数

1
2
3
4
5
[ function ] funname[()]     注意只能省略其中一个
{
Action;
[return int;]
}

(1)必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
sum()
{
    SUM=$[$1+$2]
    echo $SUM
}

read -p "请输入第一个数值: " n1
read -p "请输入第二个数值: " n2
sum $n1 $n2

image-20260213181041653

作者

步步为营

发布于

2026-02-13

更新于

2026-02-13

许可协议