Linux之shell编程基本用法和语法笔记

1、脚本格式要求

要用以下命令开头

#!/bin/bash

2、脚本的常用执行方式

1)赋予脚本运行权限执行脚本
在这里插入图片描述

2)通过sh直接执行脚本
在这里插入图片描述

3、shell的变量

1)LinuxShell中的变量分为,系统变量用户自定义变量

①系统变量比如$HOME、$PWD、$SHELL、$USER

②用户变量

用户变量的定义:变量名=值
撤销变量:unset 变量
声明静态变量:readonly 变量
注:静态变量不能unset

变量的定义规则
1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头。
2)等号两侧不能有空格
3)变量名称一般习惯为大写

可以通过使用反引号(`)或者是($())运行其中的命令将结果返回
#!/bin/bash
#系统变量
echo "PATH=$PATH"
#用户自定义变量
NAME="zhangsan"
echo "NAME=$NAME"
unset NAME
echo "NAME=$NAME"
#静态变量定义
readonly AGE=11
echo "AGE=$AGE"
unset AGE

运行结果
在这里插入图片描述
`和$

#!/bin/bash
#反引号和$
echo `-ls`
echo ""
echo $(-ls -l)

运行结果
在这里插入图片描述

4、设置环境变量

1)基本语法

①export 变量名=变量值(功能描述:将shell变量输出为环境变量)

②source 配置文件(功能描述:让修改后的配置信息立即生效)

③echo $变量名(功能描述:查询环境变量的值)
2)步骤
①在/etc/profile文件中最后定义如下内容

#添加环境变量
export YEAR=2021

②查看配置的环境变量

#打印添加的环境变量
echo $YEAR
#使配置生效
source /etc/profile
echo $YEAR

注意:在输出环境变量前,需要让其生效使用如下指令

source /etc/profile

运行效果
在这里插入图片描述

5、位置参数变量

参数 功能
$n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10}
$* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$# 这个变量代表命令行中所有参数的个数
#!/bin/bash
#$n
echo "---$0---$1---$2---"
#$* 
echo "$*"        
#$@         
echo "---$0---$1---$2---"
#$# 
echo "参数个数:$#"

运行效果
在这里插入图片描述

6、预定义变量

参数 功能
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
$? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
#!/bin/bash
#$$
echo "当前进程号:$$"
./vim &
#$!
echo "最后的进程号:$!"
#$?
echo "执行的值:$?"

运行结果
在这里插入图片描述

7、运算符

1)“$((运算式))”或“$[运算式]”
2)expr m + n 注意expr运算符间要有空格

#!/bin/bash
#$((运算式))或$[]
echo "$((1+3))"
echo "$[1+4]"
#expr
echo `expr 1 + 5`

运行结果
在这里插入图片描述

8、条件判断

1)基本语法

[condition](注意condition前后要有空格)
#非空返回true,可使用$?验证(0为true,>1为false)

2)常用判断条件

①整数比较

符号 功能
= 字符串比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于

②按照文件权限进行判断

符号 功能
-r 有读的权限
-w 有写的权限
-x 有执行的权限

③按照文件类型进行判断

符号 功能
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
#!/bin/bash
#判断相等
if [ 1 -eq 1 ]
then
        echo "相等"
fi               
#判断文件是否有执行权限
if [ -w /home/zuieyuyi/shell/hello2.sh ]
then       
        echo "可写"
fi                  
#判断文件是否存在
if [ -e /home/zuieyuyi/shell/hello.sh ]
then
        echo "存在"
fi

运行结果
在这里插入图片描述

9、流程控制

1)if判断

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

======推荐使用的方式======
if [ 条件判断式 ]
then
	程序
elif [ 条件判断式 ]
then
	程序
fi
#!/bin/bash
if [ 1 -eq 1 ]
then
        echo "相等"
fi

运行结果
在这里插入图片描述

2)case语句

case $变量名 in
"值1")
	如果变量的值等于值1,则执行程序1;;
"值2")
	如果变量的值等于值2,则执行程序2;;
...省略其他分支...*)
	如果变量的值都不是以上的值,则执行此程序;;
esac
#!/bin/bash
case $1 in
"1")
        echo "1";;
"2")
        echo "2";;
"3")
        echo "3";;
esac

运行结果
在这里插入图片描述

3)for循环

语法一:
for 变量 in 值1 值2 值3...
do
	程序
done
===================================
语法二:
for ((初始值;循环控制条件;变量变化))
do
	程序
done
#!/bin/bash
#打印参数
for i in $@
do
        echo "$j"
done
#打印1加到100的总和
SUM=0
for ((1=1;i<=100;i++))
do
        SUM=$[ $SUM+$i ]
done
echo "$SUM"

运行结果
在这里插入图片描述

4)while循环

while [ 条件判断式 ]
do
	程序
done
#!/bin/bash
i=0
#打印0到n的值不包括0
while [ $i -lt $1 ]
do
        i=$[$i+1]
        echo "$i"
done

运行结果
在这里插入图片描述

10、read读取控制台输入

read 选项 参数

选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。
#!/bin/bash
#读取控制台输入一个num
read -p "请输入一个数:" NUM1
echo "你输入了:$NUM1"
#读取控制台输入一个num(在10秒内输入)
read -t 10 -p "请输入一个数:" NUM2
echo "你输入了:$NUM2"

运行结果
在这里插入图片描述

11、函数

1)系统函数

  • basename 文件路径 文件后缀 功能:返回完整路径最后/的部分,常用于获取文件名
  • dirname 文件绝对路径 功能:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

在这里插入图片描述

2)自定义函数

function 方法名(){
	Action;
	return int;		#可有可无
}

调用方式
方法名 参数1 参数2
#!/bin/bash
#计算和
function getSum(){
    
    
        SUM=$[$n1+$n2]
        echo "$SUM"
}
read -p "输入第一个数:" n1
read -p "输入第二个数:" n2
#调用方法
getSum $n1 $n2

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/magicproblem/article/details/112720874