shell易混淆规则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell易混淆规则相关的知识,希望对你有一定的参考价值。

这篇是我边学边做的笔记 还是自己做笔记比较易懂 觉得记格式很重要 例子都是参考 我在印象笔记上还弄了颜色做区分 荡到这上面就没了


read 用于交互场景 就是把用户输入的信息给某个变量 -p就是会在屏幕上显示的信息
格式:read -p “提示信息” 变量名

#!/bin/bash
echo -n "Enter your name:" //参数-n的作用是不换行,echo默认是换行
read name //把键盘上输入的赋值给name
echo "hello $name,welcome to my program" //显示信息
exit 0 //退出shell程序。
上面的脚本可以简写成下面的脚本::
#!/bin/bash
read -p "Enter your name:" name 先给个变量
echo "hello $name, welcome to my program"
exit 0
https://blog.csdn.net/zhaoyw2008/article/details/8052604


变量:灵活完成工作 接收用户的参数
#var1=centos #把centos赋值给var1

变量要求
等号两边不能有空格
开头不能是数字 不要用关键字和特殊字符
可以用字母/数字/下划线 abx_123

取消变量
unset 取消变量设置 unset SCHOOL
或退出定义变量的shell环境

变量类型
环境变量
PWD PATH USER LOGNAME SHELL HOME PS1 PS2
预定义变量

  1. echo $0 //脚本的名称
  2. echo $1 //第一个参数
  3. echo $2 //第二个参数
  4. echo $* //所有参数
  5. echo $# //有几个参数
  6. echo $$ //当前进程的进程号
  7. echo $? //上一个程序的返回状态码 0表示正常 1或其他值表示异常
    ps:
    9.$()等同于`` 先执行
    10.$(()) $[] 整数运算
    位置变量
    $1 $2

sh -x调试脚本 看到执行了哪些命令

全局环境变量/etc/profile 用户文件为~/.bash_profile
“”会给变量算一个结果
‘’里面是啥就是啥
``和$()是需要先执行的 里面放命令


运算
类别 + - * / %(取余)

整数运算 1.expr 2.$[]、 $(())
格式:expr 整数1 运算符 整数2 需要转义*
$[整数1 运算符 整数2]
#expr 1 + 2 、expr $x + $y
#echo $((x-21)),$[x*21] $(()) $[] 运算符两侧可以省空格 乘法操作省转义 引用变量省$ 可以结合echo
22,903

变量的自增/自减
格式:
#i=43
#echo $[i++]
或#let i++;echo $i
i++ i=i+1
i-- i=i-1
i+=2 i=i+2
i-=2 i=i-2
i=2 i=i2
i%=2 i=i%2
i/=2 i=i/2

小数运算 bc
格式:
#echo “运算”|bc
#bc
12.3456.78
scale=4定义小数位数
#echo “$A
56.789”|bc
#echo "scale=4;$A*56.789;5/4"|bc 多个表达式分号间隔

比较

小数值比较 > < >= <= == !=
格式:echo “数值 比较符 数值” #表达式成立返回1 不成立返回0
#A=12.34;B=34.56
#echo "$A > $B"|bc #A是否小于B

整数值比较
格式:[数值 操作符 数值]
-eq 等于equal
-ne 不等于 not equal
-ge 大于等于greater equal
-le 小于等于 lesser equal
-gt 大于greater than
-lt 小于lesser then
检查已登录用户数 是否不超过5个
#who |wc -l
#[$(who|wc -l) -le 5] && echo "OK"
$()先执行
文件状态测试
格式:[操作符 文件或目录] #表达式不成立返回1成立返回0
-e 判断对象是否存在exist
-d 判断对象是否为目录directory
-f 判断对象是否为一般文件file
-r 判断对象是否有读权限
-w 写权限
-x 执行权限
#[ -d /etc/hosts ]
#echo $?
1

字符串比较
格式:[字符串1 操作符 字符串2]
== 两个字符串相同
!= 两个字符串不同
#[$USER == "root"] && echo "超级用户"

逻辑分隔
格式:命令1 操作符 命令2
[条件1] 操作符 [条件2]
&& then
|| or
例:
当前用户为root 且位于root目录下
#[$USER == "root"]&&[$PWD == "/root"]
#[$? -eq 0] && echo YES
当/opt/testdir目录不存在时 创建该目录
#[ -d "/opt/testdir" ]||mkdir /opt/testdir

以上是关于shell易混淆规则的主要内容,如果未能解决你的问题,请参考以下文章

PHP易混淆函数的区分

分析PMP易混淆知识十大点

C语言易错题 and 易混淆知识

c++概述--易混淆点记录

c++概述--易混淆点记录

C语言易错题 and 易混淆知识