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错误输出
标签:脚本,10,Shell,num1,num2,echo,sh,name
From: https://www.cnblogs.com/gudygudy/p/18611244