Shell编程

本文详细介绍Shell脚本的基础知识,包括脚本的创建、执行、变量定义与使用、条件判断、循环控制、函数定义等核心概念,并通过实例演示如何进行参数传递、环境变量设置、算术运算及文件操作,适合初学者快速上手。

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

1.shell:是一种脚本语言或命令行解释器,用来操作一些程序
2.脚本的要求:

  1. 以#!/bin/bash开头
  2. 脚本要有执行权限
    3.入门
1.vi first.sh
   echo "hello"
 2.授权:chmod 744 first.sh
 3.执行./first.sh或绝对路径执行:/root/shell/first.sh
 4.如果不授权:sh ./first.sh 

4.shell变量
$PATH $USER是系统变量 是取一个变量的值自定义变量:变量名=变量值,撤销变量unset变量名,声明静态变量readonly变量但不能unset撤销显示shell所有变量用set在引用变量或输出时用是取一个变量的值 自定义变量:变量名=变量值,撤销变量 unset 变量名,声明静态变量readonly 变量 但不能unset撤销 显示shell所有变量用set 在引用变量或输出时用:=,unsetreadonlyunsetshellset修饰

#定义变量a
a=86
#在引用变量或输出时用$
echo "a=$a"

变量也可以提升到全局环境变量,供其他shell程序使用

#定义环境变量
TOMCAT_HOME=/shell/tomcat
#设置环境变量,供外部使用
export TOMCAT_HOME
source /etc/profile让资源立即生效
echo $TOMCAT_HOME输出
在shell中使用
echo $TOMCAT_HOME

5.变量定义的规则:
名称由字母 数字 下划线组成 但不能以数字开头
等号两侧不能由空格
一般字母大写
6.将返回值赋给变量
date=date
echo date∗d=date *d=dated=(date)*
echo $d
7.单行注释:#多行注释: :<<! !
8.在执行shell脚本时传递参数:如 ./test.sh 100 200(100,200会传递到shell脚本中)

$n:n为数字,$0代表命令,$1代表100,一次类推到$9,如果大于10则为${10}
$*会把100 200当作一个整体
$@
$#标识参数个数
eg:
#!/bin/bash
#获取参数
echo "参数值:$0 $1 $2"
echo "参数整体:$*"
echo "$@"分开遍历
echo "参数个数:$#"
输出:
参数值:./test.sh 1 2
参数整体:1 2
1 2
参数个数:2

9.预定义变量:可以直接在shell中使用

$$:当前的进程号pid
$!:最后一个进程号pid
$?:最后一次执行命令的状态,0代表正确,非0不正确
eg:
echo "当前进程号=$$"
#后台运行first.sh
./first.sh &
echo "最新进程号=$!"
echo "结果:$?"
输出:
当前进程号=17044
最新进程号=17045
结果:0

10.运算符:
(())或者(())或者(())[ ]”
expr m+n(* / %乘 除 取余)

#(1+2)x3
echo "(1+2)x3=$(((1+2)*3))"
echo ""
echo "(1+2)x3=$[(1+2)*3]"
echo ""
**TEMP=`expr 1 + 2`
RES=`expr $TEMP \* 3`
echo "(1+2)x3=$RES"注意空格**

11.条件判断:
格式:

[ condition ]:前后有空格 condition非空返回true,空为false
[ condition ] && echo ok || echo nok 
常用判断:比较数的大小,判断文件权限,判断文件类型 符号含义自行百度
eg:
![在这里插入图片描述](https://img-blog.csdnimg.cn/2019030217002462.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190302170422517.png)

12.if判断
if [ 条件];
then 执行
fi
或者
if [ 条件 ]
then 执行
elif [ 条件 ]
then 执行
fi
eg:

#输入参数>=60 及格 否则不及格
if [ $1 -ge 60 ]
 then
    echo "及格"
elif [ $1 -lt 60 ]
 then
    echo "不及格"
fi

case判断:
case $变量名 in
“1”)
变量值为1,执行
;;
“2”)
变量值为2,执行
;;
esac
eg:

#输入参数1为星期1 2为星期2 其余为other
case $1 in
"1")
 echo "星期一"
;;
"2")
 echo "星期二"
;;
*)
 echo "other"
;;
esac

for循环:
语法1:
for 变量 in 值1 值2 值3
do
逻辑
done
eg:

#遍历输入参数
for i in "$*"
do
echo "$i"
done

语法2:
for((初始值;循环条件;变化值))
do
逻辑
done
eg:

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

while循环:
语法:
while [ 条件 ]
do
程序
done
eg:

#!/bin/bash
#1+..+n的值
sum=0
i=0
while [ $i -le $1 ]
do
 sum=$[$sum+$i]
 i=$[$i+1]
done
echo "$sum"

read读取控制台输入
eg:

#读取控制台输入的参数
#程序阻塞 输入的值赋给num
read -p "请输入参数:" num
echo "输入了:$num"

read -t 10//10秒内输入,10后跳走

13函数
系统函数:
basename:用于返回完整路径最后的/的部分 用于获取文件名
basename pathname suffix/basename string suffix 如果指定了suffix会把文件的后缀名去掉
eg:

#返回/shell/first.sh文件
basename /shell/first.sh

dirname:用于返回完整路径最后的/的前边部分 用于获取文件名
eg:

dirname /shell/first.sh

自定义函数:
语法:
function 函数名() //不用写形参
{
代码
return
}
调用: 函数名
eg:

#函数处理值
function getSum(){

   SUM=$[$n1+$n2]
   echo "$SUM"
}
read -p "参数1:" n1
read -p "参数2:" n2
#调用函数
getSum $n1 $n2

14.综合案列:
①每天00:00备份数据库②开始结束给提示③备份时间为文件名.tar.gz④检查是否有10天的数据有删除
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值