Shell脚本编程--Day3

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

[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的单词 :

[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命令,以空格分割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

通过全部用例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值