天生我材必有用,千金散尽还复来。 仰天大笑出门去,我辈岂是蓬蒿人。 大鹏一日同风起,扶摇直上九万里。 十步杀一人,千里不留行。 事了拂衣去,深藏身与名。 安能摧眉折腰事权贵,使我不得开心颜! 且乐生前一杯酒,何须身后千载名? 愿将腰下剑,直为斩楼兰。
 

Shell脚本

Shell脚本

声明!!!
学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页B站泷羽sec

脚本创建执行与变量使用

第一种执行

加可执行权限

image-20241215022708437

第二种执行

bash 1.sh
sh 1.sh
dash 1.sh

image-20241215022758536

第三种执行

source 1.sh

source与sh区别

image-20241215022930550

颜色区分

变量

image-20241215023037078

单引号、双引号、无引号区别

image-20241215023247164

变量拼接

echo hello $name, im {$age}years old
echo hello $name, im "$age"years old

查看、删除已定义的变量

set | grep name 查看变量
unset name 删除变量

常见变量

HOME
PATH

image-20241215023833086

支持其他位置调用该sh。

方法1

把1.sh迁移到/usr/bin

image-20241215024842622

方法2

把当前目录添加到PATH

export PATH=/root:PATH

长久变量

vi ~/.bashrc
export PATH=$PATH:/root 
source ~/.bashrc   变量生效

字符串相关的操作

str="hello world"
echo ${#str}  长度
echo ${str:0:3}   截取

image-20241215024645746

脚本程序传参

echo 执行的文件名是$0
echo 第一个参数是$1
echo 传递的参数作为一个字符串显示 $*
echo 传递的参数独立作为每个字符串显示$@
echo 传递到脚本的参数个数是$#
echo 最后命令的退出状态是$?
echo 脚本运行的当前进程ID是$$

image-20241215195608436

数学运算

expr 5 + 10  必须有空格
expr 20 - 10
expr 20 \* 10
expr 20 / 10
expr 5 + 10 /* 7
expr \( 5 + 10 \) \* 7

image-20241215200436659

image-20241215200527280

image-20241215200627894

结合变量运算

name=`expr 5 + 10`
name=$(expr 5 + 10)
echo $name

image-20241215200825952

在shell脚本与用户交互

read name age
xiaoming 18

image-20241215201130901

bash
read -p "请输入名字" name
echo $name
read -t 10 -p "请输入名字" name 限制输入时间
read -n 3 -t 10 -p "请输入名字" name 限制输入字符数不超过3

image-20241215213257867

image-20241215213129442

数字变量比较,条件判断

-eq
-lt 小于
-gt 大于
-ne 不等于
只能对数值判断,无法对字符串进行判断
num1=71
num2=72
if [ $num1 -eq $num2 ]; then
	echo 相等
else
	echo 不相等
fi

image-20241215213735390

num1=71
num2=72
if [ $num1 -lt $num2 ]; then
	echo true
else
	echo false
fi

image-20241215214056505

num1=71
num2=71
if [ $num1 -lt $num2 ]; then
	echo true
else
	echo false
fi

image-20241215214148455

字符串比较

str1="hello"
str2="hello"
if [ $str1 = $str2 ];then
	echo true
else
	echo false
fi

image-20241215214557082

大小写敏感

image-20241215214642291

image-20241215214724955

!=自动变为≠

image-20241215214716687

-z检查字符串长度是否为0,是则真
-n是否不为0,与-z相反

image-20241215214931341

image-20241215215014340

布尔运算符

num1=9

if [ $num1 != 9 ];then
	echo num1不等于9
else
	echo num1等于9
fi

image-20241215215159947

-a 逻辑与运算
-o 逻辑或运算

num1=9
num2=19
if [ $num1 = 9 -a $num2 -lt 20 ];then
	echo True
else
	echo False
fi

image-20241215215522361

num1=9
num2=19
if [ $num1 != 9 -a $num2 -lt 20 ];then
	echo True
else
	echo False
fi

image-20241215215631740

num1=9
num2=19
if [ $num1 != 9 -o $num2 -lt 20 ];then
	echo True
else
	echo False
fi

image-20241215215658385

if条件判断与for循环结构

a=10
b=20

if [ $a -eq $b ];then
	echo "a=b"
elif [ $a -gt $b ];then
	echo "a>b"
elif [ $a -lt $b ];then
	echo "a<b"
else
	echo 没有符合上述条件
fi

image-20241215222610597

加上交互:

a=10
b=20
read -p "请输入数字a:" a
read -p "请输入数字b:" b

if [ $a -eq $b ];then
	echo "a=b"
elif [ $a -gt $b ];then
	echo "a>b"
elif [ $a -lt $b ];then
	echo "a<b"
else
	echo 没有符合上述条件
fi

image-20241215222757802

for循环

for num in 1 2 3 4 5
do
	echo "number is $num"
done

image-20241215223002511

循环内容加上abc字符串

image-20241215223047169

结合变量输出循环

image-20241215223115881

for str in "hello world"
do
	echo "str is $str"
done

image-20241215223308186

for循环while循环

for i in `seq 1 5`
do
	echo $i
done
echo '——————————'
for i in $(seq 1 5)
do
	echo $i
done

image-20241215223726307

for ((i = 1; i <= 5; i++))
do
	echo $i
done

image-20241215223915195

while循环

i=1
while(( $i <= 10))  
do
	echo $i
	((i++))
done

i=1
while(( $i <= 10))  
do
	echo $i
	let "i++"
done

双括号用于算数计算和逻辑判断
let执行算数计算

image-20241215224207709

image-20241215224232706

image-20241215224442659

until循环以及函数基本创建调用

i=0
until [ ! $i -lt 10 ]
do
	echo $i
	((i++))
done

image-20241216005216236

case
read -p "请输入" num
case $num in
	1)echo 你输入的是1
	;;
	2)echo 你输入的是2
	;;
	*)echo 你输入的是其他数字 $num
esac

image-20241216005035228

DemoFunc(){
	echo "hello world"
	echo "my name is $1"
}
DemoFunc xiaoming
DemoFunc(){
	echo "hello world"
	echo "My name is $1, and my age is $2 years old."
}

image-20241216004740914

重定向操作

不同脚本互相调用

. z.sh

image-20241216005542482

source z.sh

image-20241216005703760

变量

image-20241216005934659

重定向

image-20241216010015579

image-20241216010031099

image-20241216010118459

输入重定向

/dir1
/dir2
dirs.txt
结合
ls -l < dirs.txt

TODO输入重定向没有生效。

文件描述符

0标准输入
1标准输出
2错误输出

image-20241216010421188

image-20241216010507922

posted @   gudy  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示