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

第二种执行
bash 1.sh
sh 1.sh
dash 1.sh

第三种执行
source 1.sh
source与sh区别

颜色区分
变量

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

变量拼接
echo hello $name, im {$age}years old
echo hello $name, im "$age"years old
查看、删除已定义的变量
set | grep name 查看变量
unset name 删除变量
常见变量
HOME
PATH

支持其他位置调用该sh。
方法1
把1.sh迁移到/usr/bin

方法2
把当前目录添加到PATH
export PATH=/root:PATH
长久变量
vi ~/.bashrc
export PATH=$PATH:/root
source ~/.bashrc 变量生效
字符串相关的操作
str="hello world"
echo ${#str} 长度
echo ${str:0:3} 截取

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

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



结合变量运算
name=`expr 5 + 10`
name=$(expr 5 + 10)
echo $name

在shell脚本与用户交互
read name age
xiaoming 18

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


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

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

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

字符串比较
str1="hello"
str2="hello"
if [ $str1 = $str2 ];then
echo true
else
echo false
fi

大小写敏感


!=自动变为≠

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


布尔运算符
num1=9
if [ $num1 != 9 ];then
echo num1不等于9
else
echo num1等于9
fi

-a 逻辑与运算
-o 逻辑或运算
num1=9
num2=19
if [ $num1 = 9 -a $num2 -lt 20 ];then
echo True
else
echo False
fi

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

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

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

加上交互:
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

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

循环内容加上abc字符串

结合变量输出循环

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

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

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

while循环
i=1
while(( $i <= 10))
do
echo $i
((i++))
done
i=1
while(( $i <= 10))
do
echo $i
let "i++"
done
双括号用于算数计算和逻辑判断
let执行算数计算



until循环以及函数基本创建调用
i=0
until [ ! $i -lt 10 ]
do
echo $i
((i++))
done

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

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."
}

重定向操作
不同脚本互相调用
. z.sh

source z.sh

变量

重定向



输入重定向
/dir1
/dir2
dirs.txt
结合
ls -l < dirs.txt
TODO输入重定向没有生效。
文件描述符
0标准输入
1标准输出
2错误输出



浙公网安备 33010602011771号