Linux_shell编程

本文详细介绍了Shell的基础概念、脚本格式、变量管理、环境变量设置、条件判断、循环与函数,助你快速入门Shell编程。通过实例演示了如何创建脚本、运算符应用、if-else和case结构,以及基本的循环和函数编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速入门

Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序.

脚本格式

  1. 脚本以#!/bin/bash开头
  2. 脚本需要有可执行权限
#!/bin/bash
echo "hello,world~"

脚本的常用执行方式

√方式1(输入脚本的绝对路径或相对路径)
说明:首先要赋予helloworld.sh脚本的+x权限,再执行脚本

[root@bedo19c shcode]# chmod u+x hello.sh
[root@bedo19c shcode]# ./hello.sh 
hello,world~

使用绝对路径/root/shcode/hello.sh

[root@bedo19c shcode]# /shcode/hello.sh 
hello,world~

√方式2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。比如sh hello.sh,也可以使用绝对路径

[root@bedo19c shcode]# chmod u-x hello.sh 
[root@bedo19c shcode]# sh hello.sh 
hello,world~

shell变量

shell变量介绍

  1. Linux Shell中的变量分为,系统变量和用户自定义变量
  2. 系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME等等…
  3. 显示当前shell中所有变量: set

shell变量的定义

  1. 定义变量: 变量名=值
  2. 撤销变量: unset变量
  3. 声明静态变量: 1readonly变量,注意:不能unset

示例:

#!/bin/bash
#1.定义变量A
A=100
#输出需要加上$
echo A=$A
echo "A=$A"

#2.撤销变量A
unset A
echo "A=$A"

#3.声明静态变量B=2,不能unset
readonly B=2
echo "B=$B"

#4.将指令返回的结果赋给变量
C=`date`
D=$(date)
echo "C=$C"
echo "D=$D"

结果:

[root@bedo19c shcode]# ./var.sh
A=100
A=100
A=
B=2
C=Mon Oct 17 16:02:14 EDT 2022
D=Mon Oct 17 16:02:14 EDT 2022

设置环境变量

  1. export 变量名-变量值 (功能描述:将shell变量输出为环境变量/全局变量)
  2. source配置文件 (功能描述:让修改后的配置信息立即生效)
  3. echo $变量名 (功能描述:查询环境变量的值)

位置参数变量

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

示例:

#!/bin/bash
echo "0=$0 1=$1 2=$2"
echo "所有参数=$*"
echo "$@"
echo "参数的个数=$#"

结果:

[root@bedo19c shcode]# ./myshell.sh 100 200
0=./myshell.sh 1=100 2=200
所有参数=100 200
100 200
参数的个数=2

预定义变量

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

示例:

#!/bin/bash
echo "当前执行的进程 id=$$"
#以后台的方式运行一个脚本,并获取他的进程号
/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"

结果:

[root@bedo19c shcode]# ./preVar.sh 
当前执行的进程 id=23091
最后一个后台方式运行的进程id=23092
执行的结果是=0

运算符

基本语法

  1. $((运算式))$[运算式]
  2. expr m + n表达式,注意 expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使``

应用实例

#!/bin/bash
#案例1:计算(2+3)*4的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "$RES1"

#使用第一种方式,推荐使用
RES2=$[(2+3)*4]
echo "res2=$RES2"

#使用第三种方式,expr
TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res3=$RES3"
[root@bedo19c shcode]# ./oper.sh 
20
res2=20
temp=5
res3=20

—————————————————————————————————————————

#!/bin/bash
#案例2:求出命令行的两个参数的和
SUM=$[$1+$2]
echo sum="SUM"
[root@bedo19c shcode]# ./oper1.sh 20 30
sum=50

选择

基本语法

if [ condition ]
then
fi
 (**注意condition前后要有空格**)

非空返回true,可使用$?验证(0为true,>1为false)

常用判断条件

  1. =字符串比较
  2. 两个整数的比较
    -lt 小于
    -le 小于等于
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
  3. 按照文件权限进行判断
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
  4. 按照文件类型进行判断
    -f 文件存在并且是一个常规的文件
    -e 文件存在
    -d 文件存在并是一个目录

示例:

#!/bin/bash
#1.判断ok否=ok
if [ "ok"="ok" ]
then
	echo "equal"
fi

#2.判断23是否大于等于22
if [ 23 -ge 22 ]
then
	echo "大于等于"
fi

#3.判断文件是否存在
if [ -f /shcode/myshell.sh ]
then
	echo "存在"
fi

if [ hello ]
then
	echo "hello"
fi
[root@bedo19c shcode]# ./ifdemo.sh 
equal
大于等于
存在
hello

if判断

#!/bin/bash
#案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出"及格了",如果小于60,则输出"不及格"
if [ $1 -ge 60 ]
then
	echo "及格了"
elif [ $1 -lt 60 ]
then
	echo "不及格"
fi
[root@bedo19c shcode]# ./ifcase.sh 70
及格了
[root@bedo19c shcode]# ./ifcase.sh 50
不及格

注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格

case语句

#!/bin/bash
#案例1:当命令行参数是1时,输出"周一",是2时,就输出"周二",其它情况输出 "other"
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other..."
;;
esac
[root@bedo19c shcode]# ./testcase.sh 1
周一
[root@bedo19c shcode]# ./testcase.sh 2
周二
[root@bedo19c shcode]# ./testcase.sh 
other...

循环

for循环

  • 基本语法1

    for 变量 in 值1 值2 值3…
    do
     程序/代码
    done

#!/bin/bash
#案例1:打印命令行输入的参数「这里可以看出$*和$@的区别]
#注意$*是把输入的参数,当做一个整体,所以,只会输出一句
for i in "$*"
do
	echo "num is $i"
done

#使用$@来获取输入的参数,注意,这时是分别对待,所以有几个参数,就输出几行
echo "=========================="
for j in "$@"
do
	echo "num is $j"
done
[root@bedo19c shcode]# ./testFor.sh 100 200 300
num is 100 200 300
==========================
num is 100
num is 200
num is 300

  • 基本语法2

    for (( 初始值;循环控制条件;变量变化 ))
    do
     程序/代码
    done

#!/bin/bash
#从1加到100
SUM=0
for(( i=1; i<=$1; i++ ))
do
	SUM=$[$SUM+$i]
done
echo "SUM=$SUM"
[root@bedo19c shcode]# ./testFor2.sh 100
SUM=5050

while循环

  • 基本语法

    while [ 条件表达式 ]
    do
    程序/代码
    done

#案例:从命令行输入一个数n,统计从1+..+ n的值是多少?
#!/bin/bash
SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "执行结果=$SUM"

函数

#案例1:计算输入两个参数的和(动态的获取),getSum
#!/bin/bash
function getSum() {
	SUM=$[$n1+$n2]
	echo "两数之和是$SUM"
}

#输入两个值
read -p "输入n1=" n1
read -p "输入n2=" n2
#调用自定义函数
getSum $n1 $n2
[root@bedo19c shcode]# ./testFunc.sh 
输入n1=10
输入n2=90
两数之和是100
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值