shell脚本

本文介绍了Linux操作系统中的bash脚本语言,包括脚本的基本结构、变量的声明与使用、数组操作、数学运算、逻辑判断、循环控制以及函数的定义和调用。还提到了文件判断、用户输入和字符串处理等重要概念。

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

Linux操作系统里面的一门脚本语言:BASH SH CSH KSH…

使用C语言写出来的一个脚本工具

vim编辑器

shell对于空格有非常严格的要求

第一行:
一定要写上脚本运行的命令所在的位置
#!/bin/bash

变量赋值:
变量的声明和赋值是不能有任何空格的;
所有的变量默认都是当成字符串保存的。
变量名=值
a=10

变量的使用:
${变量名}
echo ${a}

删除变量保存的内容:
unset 变量名

将变量变成只读的类型:
readonly 变量名;

放入单引号的变量不会被读取:
‘${变量名}’

数据类型:
字符串
拼接
变量1{变量1}变量1{变量2}

长度
${#变量名}

截取:序号从0开始
${变量名: 开始序号: 连续取值的长度}
${变量名: 开始序号} 没有连续取值长度表示取值取到最后
取最后一位 ${变量名: ${#变量名}-1: 1}

数组
变量名=(值1 值2 值3 值4 “值5” …)
${数组的变量名} 表示数组里面的第一个元素
${数组的变量名[]} 查看数组里面所有的数据
${数组的变量名[下标的序号]} 查看序号对应的值
${数组的变量名[-1]} 取数组的最后一个元素
${#数组的变量名[
]} 获取数组里面有多少元素

数组内容的修改:
数组的变量名[下标的序号]=新的值
数组的变量名[KaTeX parse error: Expected '}', got '#' at position 2: {#̲数组的变量名[*]}]=新的值…{#s[*]}]=‘蚂蚁’
unset 数组的变量名[下标的序号] 删除数组中某个序号的内容

数组没有插入的方法!

数字
–整数
+

  • echo expr ${a} \* ${b}
    / 整数和整数相除还有整数
    % 取余运算
    ** 幂运算

第一种: (((((({变量名}+${变量名}))
第二种: [[[{变量名}+${变量名}]
第三种: expr ${变量名} + ${变量名} 反引号是用来引用系统命令的
第四种: let 变量=变量1+变量2

–小数
+

变量名+{变量名}+变量名+{变量名}”|bc

/
“scale=小数精度; 变量名/{变量名}/变量名/{变量名}”|bc

自增和自减:
a=10
a++
++a
都是a的自增
let b=++a 先自增再赋值
let b=a++ 先赋值再自增

输入输出:
打印输出:
echo 要打印的东西
打印的时候在字符串内,加上转义符:
echo -e “\t\n\c”

用户输入:
read -p “提示信息” 变量名

逻辑判断:
if判断的语法:
if test 条件判断
then
执行语句
elif test 条件判断
then
执行语句

else
执行语句
fi

数字的比较:
小于 -lt
大于 -gt
等于 -eq
小于等于 -le
大于等于 -ge
不等于 -ne
并且 -a
或者 -o

字符串的比较:
等于 ==
不等于 !=

read -p “number1:” a
read -p “number2:” b
read -p “number3:” c
#打印出三个变量值中数字最大的那一个
if test ${a} -ge ${b} -a ${a} -ge ${c}
then
echo ${a}
elif test ${b} -ge ${a} -a ${b} -ge ${c}
then
echo ${b}
else
echo ${c}
fi

case基本语法:
case ${变量名} in
值1) 执行语句;;
值2) 执行语句;;

*) 执行语句;;
esac

read -p “星期几?” day

case ${day} in
saterday)
echo ‘今天加班’;;
sunday)
echo ‘今天休息’;;
*)
echo ‘正常上班’;;
esac

case和select结合使用:
select 变量名 in 值1 值2 值3 …
do
执行语句
done

select fruit in apple pear orange pinch
do
case ${fruit} in
apple)
echo “8元”;;
pear|orange|pinch)
echo “9元”;;
*)
echo “没有其他的内容”;;
esac
exit
done

判断文件或者文件夹是否存在
第一种:
read -p “文件名:” n
a=find ./ -name ${n}
if test ${#a} -eq 0
then
echo ‘没有这个文件’
else
echo ‘文件已存在’
fi

第二种;
read -p “文件名:” n
if test -f ${n}
then
echo ‘yes’
else
echo ‘no’
fi

文件的判断用-f ,文件夹的判断用 -d

练习: select+case+if
给用户一个菜单,1.新建文件 2,新建文件夹
给用户输入文件或者文件夹名称的提示,并且保存用户输入的信息
判断这个文件或者文件夹是否存在,不存在则新建一个,存在则提示
select c in file directory
do
case ${c} in
file)
read -p ‘输入文件名:’ n
if test -f ${n}
then
echo ‘文件已存在’
else
touch ${n}
echo ‘文件新建成功’
fi;;

directory)
read -p ‘输入文件夹的名字:’ n
if test -d ${n}
then
echo ‘文件夹已存在’
else
mkdir ${n}
echo ‘文件夹创建成功’
fi;;

*) echo ‘只能选1和2!’
esac
break
done

循环控制:
for循环语法:
类python语法:
使用数组作为循环范围
for 变量名 in ${数组[*]}
do
执行语句
done

fruits=(apple pear orange pinch banana)

for f in ${fruits[*]}
do
if test ${f:0:1} == ‘p’
then
echo ${f}
fi
done

使用数字作为循环范围
s=0
for i in {1…10}
do
let s=s+i
done
echo ${s}

for i in {1…10…2}
do
echo ${i}
done

for i in seq 1 2 10
do
echo ${i}
done

类C语法:
for ((变量=初始值; 变量>=结束值; 变量的自增或者自减))
do
执行语句
done

循环关键字:
continue 跳过循环
break 跳出循环

while循环:
while [ 判断条件 ]
do
执行语句
done

n=1
while [ ${n} -lt 10 ]
do
echo ${n}
let n=n+2
done

九九乘法表
for ((i=1;i<=9;i++))
do
for ((j=1;j<=i;j++))
do
let ji=i*j
echo -e “jx{j}xjx{i}=${ji}\t\c”
done
echo
done

打印出平行四边形
#****

****

****

****

for i in {1…4}
do
let k=i-1
for ((kong=1;kong<=k;kong++))
do
echo -e " \c"
done

for j in {1…4}
do
echo -e “*\c”
done
echo
done

函数:只能返回数字
function 函数名字(){
函数的执行语句
return 数字类型
}

调用函数:
函数名字

接收函数的返回值:
$?

声明函数:
function sum_(){
let s=10+20
return KaTeX parse error: Expected 'EOF', got '}' at position 5: {s} }̲ 使用函数: sum_ 接收返…?
echo 数据的返回值是:${a}

带有输入参数的函数:
function sum_(){
let s=$1+$2
return ${s}
}

调用的时候输入参数的值:
sum_ 7 8

也可以在运行文件的时候再进行值的输入
sum_ $1 $2
sh s4.sh 5 7

∗表示传入进来的所有的数据,* 表示传入进来的所有的数据,表示传入进来的所有的数据,本身就是一个数组的所有内容
$# 可以查看传入进来的所有参数的数量
function sum2_(){
s=0
for i in $

do
let s=s+i
done
return ${s}
}

sum2_ 2 3 4 5 6
echo $?

在一个文件中导入另一个文件声明好的函数:
#!/bin/bash

. /usr/t1012/s4.sh

sum2_ 4 5 6 7
echo 和:$?

. 表示导入文件

编辑一个函数,函数会接收一个用户的id,根据这个id去自己的hive某个表中查询对应的年龄,并且当成返回值进行显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一凡888

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值