精华内容
下载资源
问答
  • linux 判断表达式

    2014-01-22 11:37:28
    比如可以比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 if ....; then  .... elif ....; then  .... else  .... fi...
    大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 
    if ....; then 
      .... 
    elif ....; then 
      .... 
    else 
      .... 
    fi
    [ -f "somefile" ] :判断是否是一个文件 
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 
    [ -n "$var" ] :判断$var变量是否有值 
    [ "$a" = "$b" ] :判断$a和$b是否相等
        -r file     用户可读为真 
      -w file     用户可写为真 
      -x file     用户可执行为真 
      -f file     文件为正规文件为真 
      -d file     文件为目录为真 
      -c file     文件为字符特殊文件为真 
      -b file     文件为块特殊文件为真 
      -s file     文件大小非0时为真 
      -t file     当文件描述符(默认为1)指定的设备为终端时为真  
    ######################################################### 
    含条件选择的shell脚本          对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
    -ne —比较两个参数是否不相等 
    -lt —参数1是否小于参数2 
    -le —参数1是否小于等于参数2 
    -gt —参数1是否大于参数2 
    -ge —参数1是否大于等于参数2 
    -f — 检查某文件是否存在(例如,if [ -f "filename" ]) 
    -d — 检查目录是否存在 
    几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。 ################################################################## 
    判断文件是否存在 
    #!/bin/sh 
    YACCESS=`date -d yesterday +%Y%m%d` 
    FILE="access_$YACCESS.log.tgz" 
    cd /data/nginx/logs
    if [ -f "$FILE" ];then 
    echo "OK" 
    else 
    echo "error $FILE" > error.log 
    mail -s "$FILE backup fail" xxxx@yyyy.com <error.log 
    fi
    ###############
    #!/bin/sh
    # 
    DIR=/data/img_cache
    DAY=`date +"%Y-%m-%d %H:%M"`
    NUM=`ls $DIR |wc -l`
    DIRNAME=`ls $DIR| grep leveldb | head -n 1 | awk '{print $NF}'`
    if [[ $NUM -gt 3 ]];then
        rm -rf $DIR/$DIRNAME
        echo "---------$DAY----($DIR)-----------------------" >> /tmp/img_cache.log
        echo "$DIRNAME Deleted successful" >> /tmp/img_cache.log
    fi
    补充:文件测试操作:
    返回true,如果:
    -e                          文件存在
    -a                          文件存在(已被弃用)
    -f                           被测文件是一个regular文件(正常文件,非目录或设备)
    -s                          文件长度不为0
    -d                          被测对象是目录
    -b                          被测对象是块设备
    -c                          被测对象是字符设备
    -p                          被测对象是管道
    -h                          被测文件是符号连接
    -L                          被测文件是符号连接
    -S(大写)                 被测文件是一个socket
    -t                          关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端
    -r                          文件具有读权限,针对运行脚本的用户
    -w                         文件具有写权限,针对运行脚本的用户
    -x                          文件具有执行权限,针对运行脚本的用户
    -u                          set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现
    -k                          设置粘贴位
    -O                         运行脚本的用户是文件的所有者
    -G                         文件的group-id和运行脚本的用户相同
    -N                         从文件最后被阅读到现在,是否被修改
    f1 -nt f2                文件f1是否比f2新
    f1 -ot f2                文件f1是否比f2旧
    f1 -ef f2                文件f1和f2是否硬连接到同一个文件
    二元比较操作符,比较变量或比较数字
    整数比较:
    -eq                       等于            if [ "$a" -eq "$b" ]
    -ne                       不等于         if [ "$a" -ne "$b" ]
    -gt                        大于            if [ "$a" -gt "$b" ]
    -ge                       大于等于      if [ "$a" -ge "$b" ]
    -lt                         小于            if [ "$a" -lt "$b" ]
    -le                        小于等于      if [ "$a" -le "$b" ]
    <                          小于(需要双括号)       (( "$a" < "$b" ))
    <=                        小于等于(...)                (( "$a" <= "$b" ))
    >                          大于(...)                      (( "$a" > "$b" ))
    >=                        大于等于(...)                (( "$a" >= "$b" ))
    字符串比较:
    =                          等于           if [ "$a" = "$b" ]
    ==                        与=等价
    !=                         不等于        if [ "$a" = "$b" ]
    <                          小于,在ASCII字母中的顺序:
                                if [[ "$a" < "$b" ]]
                                if [ "$a" \< "$b" ]         #需要对<进行转义
    >                          大于
    -z                         字符串为null,即长度为0
    -n                         字符串不为null,即长度不为0

     

    展开全文
  • shell中的判断表达式

    2016-12-30 09:58:48
    比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。 注意:这里的空格很重要。要确保方括号的空格。笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。 if ....; then .... elif .....

    比如比较字符串、判断文件是否存在及是否可读等,通常用"[]"来表示条件测试。

    注意:这里的空格很重要。要确保方括号的空格。笔者就曾因为空格缺少或位置不对,而浪费好多宝贵的时间。

    if ....; then
    ....
    elif ....; then
    ....
    else
    ....
    fi
    [ -f "somefile" ] :判断是否是一个文件
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    [ -n "$var" ] :判断$var变量是否有值
    [ "$a" = "$b" ] :判断$a和$b是否相等
    -r file     用户可读为真
    -w file     用户可写为真
    -x file     用户可执行为真
    -f file     文件为正规文件为真
    -d file     文件为目录为真
    -c file     文件为字符特殊文件为真
    -b file     文件为块特殊文件为真
    -s file     文件大小非0时为真
    -t file     当文件描述符(默认为1)指定的设备为终端时为真

    含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
    基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
    -ne —比较两个参数是否不相等
    -lt —参数1是否小于参数2
    -le —参数1是否小于等于参数2
    -gt —参数1是否大于参数2
    -ge —参数1是否大于等于参数2
    -f — 检查某文件是否存在(例如,if [ -f "filename" ])
    -d — 检查目录是否存在
    几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。

    下面举二个例子吧,以方便大家的理解。

    1、判断文件是否存在

    复制代码 代码如下:

    #!/bin/sh
    # 判断文件是否存在
    # link:www.jb51.net
    # date:2013/2/27

    YACCESS=`date -d yesterday +%Y%m%d`
    FILE="access_$YACCESS.log.tgz"
    cd /data/nginx/logs
    if [ -f "$FILE" ];then
    echo "OK"
    else
    echo "error $FILE" > error.log
    mail -s "$FILE backup fail" test123@jb51.net <error.log
    fi

    复制代码 代码如下:

    #!/bin/sh
    # 清除相关文件,并按时间段记录日志
    # link:www.jb51.net
    # date:2013/2/27
    #
    DIR=/data/img_cache
    DAY=`date +"%Y-%m-%d %H:%M"`
    NUM=`ls $DIR |wc -l`
    DIRNAME=`ls $DIR| grep leveldb | head -n 1 | awk '{print $NF}'`
    if [[ $NUM -gt 3 ]];then
      rm -rf $DIR/$DIRNAME
      echo "---------$DAY----($DIR)-----------------------" >> /tmp/img_cache.log
      echo "$DIRNAME Deleted successful" >> /tmp/img_cache.log
    fi

    判断文件是否存在:

    p_key="/root/.ssh/id_dsa.pub";
    p_key=`stat -c %Y $p_key`;
    while [ -e $p_key ]
    do
      echo "$p_key file not exit"
      sleep 1
      p_key="/root/.ssh/id_dsa.pub";
      p_key=`stat -c %Y $p_key`;
    done

    展开全文
  • (一)逆波兰表达式介绍:表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式(Infix Expression),如A+B。波兰数学家Jan Lukasiewicz提出...

    (一)逆波兰表达式介绍:

    表达式一般由操作数(Operand)、运算符(Operator)组成,例如算术表达式中,通常把运算符放在两个操作数的中间,这称为中缀表达式(Infix Expression),如A+B。

    波兰数学家Jan Lukasiewicz提出了另一种数学表示法,它有两种表示形式:

    把运算符写在操作数之前,称为波兰表达式(Polish Expression)或前缀表达式(Prefix Expression),如+AB;把运算符写在操作数之后,称为逆波兰表达式(Reverse Polish Expression)或后缀表达式(Suffix Expression),如AB+;前后缀表达式的出现是为了方便计算机处理,它的运算符是按照一定的顺序出现,所以求值过程中并不需要使用括号来指定运算顺序,也不需要考虑运算符号(比如加减乘除)的优先级。

    先介绍中简单的人工转化方法:

    假设有一个中缀表达式a+b*c-(d+e):

    1. 首先将这个中缀表达式的所有运算加括号((a+(b*c))-(d+e))
    2. 然后将所有运算符放到括号后面,这样就变成了((a(bc)* )+ (de)+ )-
    3. 把所有括号去掉abc*+de+-,最后得出的结果就是后缀表达式。

    (二)算法

    一、 将中缀表达式转换成后缀表达式算法:

    从左到右遍历中缀表达式的每一个数字和符号,若是数字就输出即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级(没有括号,乘除优先于加减),是右括号或优先级低于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出后缀表达式为止。

    单把优先级低于栈顶符号,则栈顶元素依次出栈并输出这句话截取出来如何思考?这样做的结果优先级高的将更靠近操作数,在后缀表达式进行求值的时候,就会被先计算;其实后缀表达式已经把优先级蕴含在顺序中了。

    二、逆波兰表达式求值算法:

    1、循环扫描语法单元的项目。

    2、如果扫描的项目是操作数,则将其压入操作数堆栈,并扫描下一个项目。

    3、如果扫描的项目是一个二元运算符,则对栈的顶上两个操作数执行该运算。

    4、如果扫描的项目是一个一元运算符,则对栈的最顶上操作数执行该运算。

    5、将运算结果重新压入堆栈。

    6、重复步骤2-5,堆栈中即为结果值。

    二、将中缀表达式转换成前缀表达式算法:

    从右到左遍历中缀表达式的每一个数字和符号,若是数字就输出即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级(没有括号,乘除优先于加减),是左括号或优先级高于栈顶符号,则栈顶元素依次出栈并输出,并将当前符号进栈,一直到最后输出前缀表达式为止。

    二、波兰表达式求值算法:

      1、从右到左依次扫描语法单元的项目。

      2、如果扫描的项目是操作数,则将其压入操作数堆栈,并扫描下一个项目。

      3、如果扫描的项目是一个二元运算符,则对栈的顶上两个操作数执行该运算。

      4、如果扫描的项目是一个一元运算符,则对栈的最顶上操作数执行该运算。

      5、将运算结果重新压入堆栈。

      6、重复步骤2-5,堆栈中即为结果值。

    ab03b7a269ed647fb024ef6a6cf62536.png

    (三)代码实现:

    package polish;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    import java.util.Stack;
    
    public class PolishNotation {
    	public static void main(String[] args) {
    		System.out.println("请输入计算表达式:");
    		Scanner sc = new Scanner(System.in);
    		String input = sc.nextLine();
    		sc.close();
    		
    		StringBuilder sb = new StringBuilder();
    		//创建运算符栈
    		Stack<Character> opStack = new Stack();
    		//设定运算符优先级
    		Map<Character,Integer> opMap = new HashMap();
    		opMap.put('(', 0);
    		opMap.put('+', 1);
    		opMap.put('-', 1);
    		opMap.put('*', 2);
    		opMap.put('/', 2);
    		
    		//处理字符串
    		for(int i =0;i<input.length();i++){
    			//如果是'('直接压栈
    			if(input.charAt(i) == '('){
    				opStack.push('(');
    				//如果是运算符
    			}else if(isOperator(input.charAt(i))){
    				char curOp = input.charAt(i);
    				//如果运算符栈是空,就直接压栈
    				if(opStack.isEmpty())
    					opStack.push(curOp);
    				//运算符栈不为空,且当当前运算符的优先级比栈内第一个运算符的优先级高的时候,压栈
    				else if(opMap.get(curOp) > opMap.get(opStack.peek()))
    					opStack.push(curOp);
    				else{
    				//栈不为空,且运算符的优先级小于等于栈顶元素
    				for(int j = 0;j<=opStack.size();j++){
    					//弹出栈内第一个元素
    					char ch = opStack.pop();
    					sb.append(ch + "");
    					if(opStack.isEmpty()){
    						opStack.push(curOp);
    						break;
    					}else if(opMap.get(curOp) > opMap.get(opStack.peek())){
                            opStack.push(curOp);
                            break;
                        }					
    				}
    			}
    		}else if(input.charAt(i) == ')'){//如果是')'就把站內'('上的元素都弹出栈
    			for(int j = 0;j<=opStack.size();j++){
    				char c = opStack.pop();
    				if(c == '(')
    					break;
    				else
    					sb.append(c + "");
    			}
    		}else{
    			sb.append(input.charAt(i)+"");
    		}
    	}
    		//把栈内剩余的运算符都弹出栈
    		for(int i = 0;i<=opStack.size();i++){
    			sb.append(opStack.pop()+"");
    		}
    		System.out.println(sb);
    }
    
    	private static boolean isOperator(char charAt) {
    		if(charAt == '+'||charAt=='-'||charAt=='*'||charAt=='/')
    			return true;
    		return false;
    	}
    }
    展开全文
  • 首先想到的是最基本的加减乘除问题点+(加) 通常以 赋值A=1 B=2 为例print(A+B) 在这儿 A+B是等于3但是在编程逻辑思维里边不应该是12吗在这就需要解释一下,如果A=“1” B=“2” 那么print(A+B) 才会是 12赋值的...



    在讲到基本语法的时候,很多人会遇到一些细节上的疑问,细节关系成败。此篇文章就做关于语法上边常见误区的总结更新


    1,变量的命名方式,规范职业习惯

    #1.变量的命名要做到见名知意,禁止使用无意义的名字,如:dfsafg fdgfs︿( ̄︶ ̄
    #2.变量的名字可以包含字母以及下划线以及数字,但是禁止使用纯数字汉字符号
    #3.变量的名字可写的很长但是尽量不要写的太短
    #4.变量的命名有两种方式,
       #1驼峰命名法
         #大驼峰  MyName   CodingMan
         #小驼峰 myName    codingMan

       #2下划线命名法
        #  my_name   coding_man

    #5变量的命名不能和系统保留字一样   print



    2. 首先想到的是最基本的加减乘除

    问题点

    +(加)      


    通常以 赋值A=1   B=2 为例

    print(A+B)  

    在这儿 A+B是等于3

    但是在编程逻辑思维里边不应该是12吗

    在这就需要解释一下,如果

    A=“1”   B=“2” 

    那么print(A+B) 才会是 12

    赋值的数字加引号和不加引号是有区别的,加引号的情况下我们通常是认为是一个字符或者字符串 ,否则就是通常意义上的数值

    这一点才接触的朋友要格外注意


    3.条件判断表达式 if elif else的结构用法

    疑问点在这----if与elif似乎功能相同。为什么还要用elif还有else是什么


    简单解释,如果单个程序全部用if语句,程序运行时会遍历所有if。不管前者是否关系成立结果会一直运行下去。而elif,程序运行时,只要if或elif之一满足程序运行,则程序执行完对应输出语句后自动结束该轮if,不会再执行后续的elif或else。如果仅仅需要一次判断,则仅用if就行,如果需要多次判断就需要用到elif;else是在所有判断结束后。。。。。


    4.

    关于输入 input的用法

    name = input(“请输入姓名:”)

    age = input(“请输入年龄:”)

    hobby = input(“请输入爱好”)

    print(“姓名:%s\n年龄:%s\n爱好:%s\n” % )(name,age,hobby))








    展开全文
  • 正则表达式提供了一种字符串匹配模式的描述形式...通常使用正则表达式的 test 方法,当传入的字符串符合正则表达式的模式要求时会返回 true。如仅允许输入数字,可用以下方法检测:function checkNum(inputStr){ re...
  • 判断一个字符是不是汉字通常有三种方法,第一种用 ASCII 码判断,第二种用汉字的UNICODE编码范围判断,第三种用正则表达式判断,以下是具体方法
  • 正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 Regex regex = new Regex(@"[\u4e00-\u9fa5]"); string str = “48445helloWorld!” regex.IsMatch(str.ToString()) bai\u4e00”和“\u9fa5”是...
  • 本文将介绍一段实例代码,来讲解利用正则表达式使C#判断输入日期格式是否正确的方法。希望这段代码能对大家有所帮助。  通常我们在用C#编写系统程序或者Web开发时,都会遇到需要验证输入的字符串是否是日期的情况...
  • 2.expression表达式通常有返回结果) #值,变量和运算符共同组成的整体我们将其称为表达式。其形式有表达式,变量表达式,计算表达式,字符串表达式。 exec执行声明语句,eval执行表达式 exec('a=5') b=3 eval('a+...
  • 正则表达式(Regular Expression)通常被用来检索、替换那些符合某个模式(规则)的文本。此处的Regular即是规则、规律的意思,Regular Expression即“描述某种规则的表达式”之意。本文收集了一些常见的正则表达式用法...
  • 因此,正则表达式通常是一个成熟开发人员的标配,可以辅助实现开发效率的极强提升。在需要实现校验字段、字符串等内容时,通常就可以通过正则表达式实现:下面是技匠整理的,经常使用到的20个正则表达式。1、校验...
  • 正则表达式

    2019-09-27 10:29:08
    正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。 简单来说就是用一串特殊格式的字符来找到全部符合一定要求的字符串,也可以用字符串来匹配判断正则表达式。而搜索的方式可以理解为DFA或者NFA的...
  • 因此,正则表达式通常是一个成熟开发人员的标配,可以辅助实现开发效率的极强提升。在需要实现校验字段、字符串等内容时,通常就可以通过正则表达式实现:下面是技匠整理的,经常使用到的20个正则表达式。1、校验...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,124
精华内容 449
关键字:

判断表达式通常