声明:
学习视频来自B站up主【泷羽sec],如涉及侵权行为请马上删除文章,文章所提及内容,均为学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!
课程链接:泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频
所用工具参考以下链接https://pan.quark.cn/s/d3121f368675
shell(全)
建立一个1.sh
vim 1.sh
可以利用 /bin/sh, /bin/bash,/bin/dash 这三种其实都调用的dash这个解释器
比如 ls -l /bin/sh或者/bin/bash 得到的都是dash
比如先vim 1.sh
然后ehco hello word 然后保存退出运行一下
1.运行之前要先给权限 不然不能执行(chmod 777 1.sh或者chmod u+x 1.sh)
2.还可以直接用sh/dash/bash 1.sh,也能直接运行(因为他们是脚本执行器)
3.source 1.sh 也可以直接执行,但是颜色也会加深
变量的使用
name=“xixi”
echo $name
age=“27”
echo $age
echo my name is $name,and my age is $age years old
echo "my name is $name,and my age is $age years old"
打印数值
echo 'my name is $name,and my age is $age years old'
没有打印数值,而是打印变量
echo my name is $name,and my age is $ageyears old
没有这个变量时,就会为空
echo my name is $name,and my age is "$age" years old
打印数值
echo my name is $name,and my age is {$age} years old
打印数值和大括号
变量名最好不要用空格,一般是数字、字符、字符串
set | grep name 筛选出带name的变量
unset name 可以删除name变量
永久环境变量
常见的变量
echo $HOME (root用户)
echo $PATH 环境变量
which ls 查看ls的路径
变成永久变量的方法
1.把脚本写到/usr/bin目录下
vim 1.sh
cat 1.sh 查看
mv 1.sh /usr/bin 移动
1.sh 直接执行
2.把 /root/这个目录放在环境变量中
export PATH=/root:PATH
echo $PATH
vi .bashrc
export PATH=/root:PATH
source /usr/bin .bashrc 变量生效,重启生效
新打开一个终端执行1.sh
字符串相关操作
name ="xixi" age="11"
echo "my name is $name,and my age is $age years old"
str ="hello world"
echo ${#str:0:7}
类似于python切片,输入hello w
脚本参数传递
vim 2.sh
echo 执行的文件名是:$0
echo 第一个参数是:$1
echo 传递的参数作为一个字符串显示:$*
echo 传递的参数独立作为每个字符串显示:$@
echo 传递到脚本的参数个数是:$#
echo 最后命令的退出状态: ? e c h o 脚本运行的当前进程 I D 是: ? echo 脚本运行的当前进程ID是: ?echo脚本运行的当前进程ID是:$
sh 2.sh name 添加参数name
修改脚本
echo 执行的文件名是:$0
echo 第一个参数是:$1
echo 第二个参数是:$2
echo 第三个参数是:$2
echo 传递的参数作为一个字符串显示:$*
echo 传递的参数独立作为每个字符串显示:$@
echo 传递到脚本的参数个数是:$#
echo 最后命令的退出状态: ? e c h o 脚本运行的当前进程 I D 是: ? echo 脚本运行的当前进程ID是: ?echo脚本运行的当前进程ID是:$
执行sh 2.sh 1 2 3
数学运算
expr 1 + 2
必须隔开写,不然当参数了
expr 1 - 2
乘法 expr 20 \* 10
除法 20 / 10
取余 expr 20 % 10
混合 expr 5 + 10 \* 10
`expr \(5 + 10\) \* 7`
num=`expr 5 + 10`
反引号转义
或者num=$(expr 5 + 10)
echo $num
脚本与用户交互
read name age
xixi 11
echo $name
echo $age
bash
read -p “请输入您的姓名:” name
xixi
echo $name
read -t 10 -p “请输入您的姓名:” name
read -n 3 -t 10 -p “请输入您的姓名:” name
-n限定字符数量
-p 指定输入
-t 限定输入时间
脚本编写模拟
vim 3.sh
read -p “请输入您的姓名:” name
echo “您输入的姓名是 $name,请您确认!”
关系运算符
-eq 相等
-lt 小于
-gt 大于
-ne 不等于
else 反转
只能对数值判断,不能对字符串判断
vim 4.sh
num1=78
num2=89
if [ n u m 1 − e q num1 -eq num1−eq num2 ] ; then
echo 相等
else
echo 不相等
fi
字符串运算符
vim 5.sh
str1=“hello”
str2=“hello”
if [ "$str1” = "$str2" ]; then
echo true
else
echo false
fi
可以尝试修改大小写,看看是否字符串敏感
结果发现,大小写敏感,会出false
再把=改成≠ ,报true
检测字符串长度是否为0
vim 5.sh
str1=“hello”
str2=“hello”
if [ -z $str1 ]; then
echo true
else
echo false
fi
true 表示为0
-n参数就是检测是否不为0,和-z相反
检测是否为空
vim 5.sh
str1=“hello”
str2=“hello”
if [ "$str111" ]; then
echo true
else
echo false
fi
为空则返回为false
布尔运算
vim 6.sh
num1=9
if [ "$num" != "9" ]; then
echo num1 不等于9
else
echo num1 等于9
fi
sh 6.sh
余运算
vim 6.sh
num1=9
num2=19
if [ "$num" ≠ "9" -a "$num2" -lt "20" ]; then
echo true
else
echo false
fi
sh 6.sh
改为-o 就只需要满足一个条件就行,-a必须全部满足
if条件判断
bash
vim 7.sh
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
for循环结构
vim 8.sh
for num in 1 2 3 4 5
do
echo “The number is $num”
done
vim 9.sh
for str in “hello world”
do
echo $str
done
vim 10.sh
for i in `seq 1 100`
do
echo $i
done
或者
for i in $(seq 1 100)
do
echo $i
done
或者
for i in ((i=1; i < 100; i++))
do
echo $i
done
while循环 遍历打印i从1到10 let:执行算数运算
vim 11.sh
i=1
while (( $i<=10))
do
echo $i
((i++))
done
或者
i=1
while (( $i<=10))
do
echo $i
let “i++”
done
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 你输入的是其他数字
;;
esac
基本函数学习
DemoFunc () {
echo “hello world”
}
DemoFunc
DemoFunc () {
echo “hello world”
echo “My name is $1 :”
}
DemoFunc xixi
DemoFunc () {
echo “hello world”
echo "My name is $1 , and my age is $2 years old"
}
DemoFunc xixi 11
不同脚本互相调用
可以先rm *.sh
删除所有shell脚本
vim 2.sh
echo “hello world”
vim 3.sh
.2.sh
bash 3.sh
以上输出的是2.sh的内容
-
vim 2.sh
name=“xixi”
age=11
vim 3.sh
source 3.sh
echo "
My name is $name , and my age is $age years old"
重定向
输出重定向
ls > 1.txt
cat 1.txt 就是把ls执行的内容放在1.txt里面
输入重定向
vim dirs.txt
/home/user/Docunments
/home/user/Pictures
/home/user/Music
ls -l < dirs.txt 就是把这几个目录的文件路径先作为ls -l命令的输入
文件描述符
0 1 2
0:标准输入
1:标准输入
2.错误输入
ls > 8.txt 2> 9.txt 如果ls命令正确那就输出到8.txt,如果不正确就输出到9.txt
cat 8.txt 有结果,表面正确输入
lll > 8.txt 2>9.txt
cat 9.txt