Shell内置和外置命令
内置和外置命令的区别:
可以通过type命令去检测
内置命令 : 在系统启动的时候加载入内存,常驻内内存,执行效率高,但是占用资源。会在当前shell进程去执行,是shell的一部分。
外置命令 : 用户需要从硬盘读取程序文件,再读入内存加载, 又叫自己单独下载的文件系统命令。 会开启子shell进程去执行。
查看Linux的内置shell命令: compgen -b
Linux特殊符号
${} # 拿出变量的值
$() # 拿出命令的执行结果
`` # 拿出命令的执行结果
() # 开启子shell去执行里面的内容
&vars # 取出变量的值
Shell数值运算
1双小括号:
# # 0为假, 非0为真。 获取值 必须加上 $
[chen@iZ0jl780lb0oio7v4b0chbZ ~]$ echo $((8 > 7))
1
[chen@iZ0jl780lb0oio7v4b0chbZ ~]$ echo $((10 + 2))
12
#! /bin/bash
print_usage()
{
printf "输入有误,请输入一个整形"
exit 1
}
# print_usage 调用函数的意思, 不用加 括号
# read == cin -p 表示提示信息
read -p "请输入一个整形: " firstnum
# -n表示对字符串判断, 为空则为false, 不为空为true
# 必须输入纯数字,如果输入的不是纯数字,条件满足
if [ -n "`echo $fiirstnum | sed 's/[0-9]//g'`" ]
then
print_usage
fi #if的闭合标签
# 输入运算符
read -p "请输入运算符: " operator
# 运算符仅限于 + - * /
if [ "${operator}" != "+" ] && [ "${operator}" != "-" ] &&[ "${operator}" != "*" ] && [ "${operator}" != "/" ]
then
printf "请输入合法的运算符\n"
fi
read -p "请输入第二个变量: " secondnum
if [ -n "`echo $secondnum | sed 's/[0-9]//g'`" ]
then
print_usage
fi #if的闭合标签
花式玩法:
[chen@iZ0jl780lb0oio7v4b0chbZ day2]$ cat test1.sh
#! /bin/bash
echo $(("$1"))
let命令 类似于双小括号命令
检测服务状态的简易脚本
CheckUrl()
{
timeout=5 # 超时时间是5秒
fails=0 # 相当于是记录失败的次数
success=9 # 成功的次数
while true
do
wget --timeout=${timeout} --tries=1 https://www.baidu.com/ -q -o /dev/null
# echo $? 返回上一条执行语句的状态码 --正常为0
if [ $? -ne 0 ]
then
let fails=fails+1 # 失败次数+1
else
let success+=1
fi
# 判断成功次数
if [ $success -ge 1 ]
then
echo "该网站正常执行"
exit 0
fi
#判断失败次数
if [ ${fails} -ge 2]
then
echo "该网站挂了,访问失败"
exit -1
fi
done
}
expr命令
expr 命令只通过传入参数的方式, 也就是加入空格
# expr要加入转义字符,防止被错误识别
[chen@iZ0jl780lb0oio7v4b0chbZ day2]$ expr 5 \+ 3
8
[chen@iZ0jl780lb0oio7v4b0chbZ day2]$ expr 8 \> 7
1
[chen@iZ0jl780lb0oio7v4b0chbZ day2]$ expr length "123456789"
9
expr命令也支持模式匹配功能
2个特殊符号
: 冒号, 计算字符串的字符数量,
.* 任意的字符串重复0次或者多次
expr 字符串 ”:“ ".*"
expr判断文件后缀是否合法
执行脚本, 传入一个文件名,判断改文件的后缀是否为.jpg文章来源:https://www.toymoban.com/news/detail-468069.html
[chen@iZ0jl780lb0oio7v4b0chbZ day3]$ cat test1.sh
#! /bin/bash
if expr "$1" ":" ".*\.jpg" > /dev/null
then
echo "是jpg文件"
else
echo "这不是jpg文件"
fi
[chen@iZ0jl780lb0oio7v4b0chbZ day3]$ bash test1.sh xxx.jpg
是jpg文件
[chen@iZ0jl780lb0oio7v4b0chbZ day3]$ bash test1.sh xxx.123jp
这不是jpg文件
找出长度不大于3的单词 :文章来源地址https://www.toymoban.com/news/detail-468069.html
[chen@iZ0jl780lb0oio7v4b0chbZ day3]$ cat test2.sh
#! /bin/bash
for str in I am good student, and I love you
do
if [ `expr length $str` -le 3 ]
then
echo $str
fi
done
[chen@iZ0jl780lb0oio7v4b0chbZ day3]$ bash test2.sh
I
am
and
I
you
计算1—1000的和
[chen@iZ0jl780lb0oio7v4b0chbZ day3]$ cat test3.sh
#! /bin/bash
# 方法1
echo $((`seq -s "+" 1000`))
# 方法2
echo {1..1000} | tr " " "+" | bc #tr命令是将+号替换空格 ,并交给bc命令执行
# 方法3
seq -s " + " 1000 | xargs expr # xargs构造参数传递给expr命令,以空格分割
到了这里,关于Shell脚本编程--Day3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!