2023年8月2日发(作者:)
shell脚本中的$((expr))和if((expr))经常搞迷糊shell脚本中的
$((expr))、((1+2-3)),也总是记不清是if ((1+2 > 3))还是if $((1+2>3)),今天写脚本⼜遇到了,查阅了bash命令的man⼿册,总算厘清了,整理⼀下,加深印象。bash 中,有种语法叫ARITHMETIC EVALUATION,⽀持整数四则运算。1.
$((expr)) 叫
Arithmetic Expansion,其中的 expr 遵循ARITHMETIC EVALUATION的规则。$ echo $((1+2))3$ echo $((2**5))322.
((expression))是shell中所谓”复合命令“中的⼀种(其它的有if,for,{ list } 等),其中的
expression 遵循ARITHMETICEVALUATION的规则。当数学表达式expression的计算结果等于零的时候,((expression))的退出码是1当数学表达式expression的计算结不等于零的时候,((expression))的退出码是0$ ((1+2))$ echo $?0$ ((1+2-3))$ echo $?1根据这⼀点,可以把((expression))⽤在if语句的条件判断中,⽤来⽐较整数⼤⼩,⽐[[命令更⽅便⼀些。$ if ((689*128 > 2300)) ; then echo hello; fihello#
⽤ [[
的等价写法$ if [[ $((689*128)) -gt 2300 ]];then echo hello; fihello在shell脚本⾥经常需要判断上⼀个命令是否执⾏成功,⽤
if (($?))就能做到#!/bin/bash# File: gbk_to_#
把给定⽂件从GBK编码转换为 UTF-8
编码# Example: ./gbk_to_ foofile="$1"tmp_file=$(mktemp)iconv -f GBK -t utf-8 "$file" > $tmp_fileif (($?)); then echo "转换 $file 失败"else cat $tmp_file > "$file" echo "转换 $file 完成"firm $tmp_fileps:下⾯的写法和上⾯是等价的,节省了字符,但不够直观。#!/bin/bash# File: gbk_to_#
把给定⽂件从GBK编码转换为 UTF-8
编码# Example: ./gbk_to_ foofile="$1"tmp_file=$(mktemp)iconv -f GBK -t utf-8 "$file" > $tmp_file && cat $tmp_file > "$file" || echo "转换⽂件 $file 失败"rm $tmp_file
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690918349a463277.html
评论列表(0条)