Shell基础

来自牛奶河Wiki
阿奔讨论 | 贡献2023年1月19日 (四) 11:59的版本 (创建页面,内容为“===语法=== ====环境变量==== . ~/.bash_profile ====转义==== *<nowiki>''</nowiki> 单引号,硬转义,所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。 *“” 双引号,软转义,只允许出现特定的shell元字符($,`,\):$用于变量值替换、`用于命令替换、\用于转义单个字符 *\ 反斜杠,转义, 去除其后紧跟的元字符或通配符的特殊意义   …”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

语法

环境变量

. ~/.bash_profile

转义

  • '' 单引号,硬转义,所有的shell元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
  • “” 双引号,软转义,只允许出现特定的shell元字符($,`,\):$用于变量值替换、`用于命令替换、\用于转义单个字符
  • \ 反斜杠,转义, 去除其后紧跟的元字符或通配符的特殊意义

  *在““中不用使用转义,但再次使用时,变量应该加”“,如:

c="a * b"
echo "$c"

与或非

  • 与 && 或: -a
  • 或 || 或: -o
  • 非 !

根据结果分支

grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"

输出

  • 错误(stderr)信息转为标准输出

2>&1

  • 标准输出(stdout)转为文件

1>/tmp/log.txt

代码

BASE

## 2022/08/29 16:23:01
TIMEID=`date '+%Y/%m/%d %H:%M:%S'`
DATEID=`date +%Y%m%d`
DATEID =`date -dyesterday +%Y%m%d`
DATEID =`date -dtomorrow +%Y%m%d`

## m02(10.10.137.188)
HOST=`hostname`
IP=`ping $HOST -c1|xargs|awk -F')' '{print $1}'|awk -F'(' '{print $2}'`
echo "$HOST($IP)"

命令行参数判断

if (( $# >= 1 )); then
    YM=$1
else
    echo $0 'YM=yyyymm'
    exit 1
fi
YY=`echo $YM |cut -c 1-4`

输入

if [ "$1" == "" ];then
    echo "Not Parameter"
fi
if [ "$1" == "" ]; then
    CS=1
#elif … ; then
else
    CS=$1
fi

数值比较

if ((${PS} > 0)); then
   echo "Task: $CMD exist."
   exit 1
else
   echo OK
fi

字符比较

if [ "$HASH_FN" == "$HASH_FN_OLD" ];then
    echo "${FN} & ${FN_OLD} Hash Some."
else
    echo "Backup ${HASH_FN} Finished."
fi

file or path exist

## if file exist, run
[ -f /etc/profile ] && source /etc/profile
# if path not exist, create
[ ! -d $VPATH ] && mkdir -p $VPATH

-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename为常规文件,则为真
-L filename 如果 filename为符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件长度不为0,则为真
-h filename 如果文件是软链接,则为真