1:在shell 中$() 与 ``等效。执行中间包含的命令语句,返回执行结果。
2:从效率来说let==(()) > expr > bc。let和(())运行是内建命令,使用相同的算法。
3:let 和 expr 的运算是整数运算,不包括浮点预算。
4:expr和bc是外部程序,expr的体积几乎等于bc的1/3,执行一次装入内存所消耗的时间就不一样。
5:从运算能力来说,bc排第一位。
shell的循环主要有3种,for,while,until
shell的分支判断主要有2种,if,case
一、read参数说明
-t 等待秒数,时间到后,read命令返回一个非0退出状态;
-p 传参,如果不加-p,系统会自动把变量写入到环境变量reply中;
-n 设置传参输入的字符个数,当输入到指定的个数后,自动执行,无需按回车;
-s 默读,将输入的文字不显示在屏幕中,例如输入密码,(据说还是会显示在屏幕上的,只是把文字调成黑色,和背景是一样的)
二、$参数
$0 脚本文件名
$# 一共传参的个数
$1 传参的第一个参数
$@ 显示所有的传参参数,(加双引号和不加一样)
$* 显示所有的传参参数,(加双引号,按列排序)
$? 上一条命令的执行结果
$! 上一个脚本的PID
$$ 执行脚本的PID
$_ 上一个脚本的最后一个参数,或者命令行的最后参数
三、-参数说明
-ne 不等于
-eq 等于
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
[ -z $usr ] ;echo $? (为0是正确)
[ -n $usr ];echo $? (不为0为正确)
[ -a ] (-a 是and 需要两边同时成立)
[ -o ] (o 是or 或者 一边 成立就为0)
-d 文件名 如果文件存在并且是目录,返回true
-e 文件名 如果文件存在,返回true
-f 文件名 如果文件存在并且是普通文件,返回true
-r 文件名 如果文件存在并可读,返回true
-s 文件名 如果文件存在并且不为空,返回true
-w 文件名 如果文件存在并可写,返回true
-x 文件名 如果文件存在并可执行,返回true
[ 2 -eq 2 ]&&echo ok
[ $USER = root];ecno $?
[ $USER != roo];echo $?
四 、取模
1、实验
[root@123123 shell-var]# url='www.liangzeyu.com'
[root@123123 shell-var]# echo $url
www.liangzeyu.com
2、取字符的个数
[root@123123 shell-var]# echo ${#url}
17
3、取余数
# 删除匹配
## 贪婪匹配
% 从后面往前删
%% 贪婪匹配
[root@123123 shell-var]# echo ${url#*.}
liangzeyu.com
[root@123123 shell-var]# echo ${url##*.}
com
[root@123123 shell-var]# echo ${url%.*}
www.liangzeyu
[root@123123 shell-var]# echo ${url%%.*}
www
4、在不修改米变量的情况下替换变量
将www替换成成aaa
[root@123123 shell-var]# echo ${url/www/aaa}
aaa.liangzeyu.com
将所有的www替换成aaa
[root@123123 shell-var]# uri='www.liangzeyu.www.com'
[root@123123 shell-var]# echo ${uri//www/aaa}
aaa.liangzeyu.aaa.com
四、整数运算
bc 运算
[root@123123 shell-var]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1 + 5
6
6*10
60
echo 运算
[root@123123 shell-var]# echo $((10+20))
30
expr运算
[root@123123 shell-var]# expr 10 + 5
15
[root@123123 shell-var]# expr 10 \* 5
50
变量运算
[root@123123 shell-var]# let aa=10+50
[root@123123 shell-var]# echo $aa
60
awk运算
[root@123123 shell-var]# awk 'BEGIN{print 1+1}'
2
[root@123123 shell-var]# echo 2.5 3.5 |awk '{print $1+$2}'
6
python运算
[root@123123 shell-var]# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2+5
7
五、查看字符长度
[root@123123 shell-var]# echo ad asd ad|wc -L
9
[root@123123 shell-var]# echo ${#url}
17
length 长度
六、控制语句
exit:退出当前的循环,脚本整体退出 ;
break:退出循环,但循环之后的命令依旧会执行;
continue:退出本次循环进行下一次循环;
有问题请加博主微信进行沟通!
全部评论