查看“Shell基础”的源代码
←
Shell基础
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
Shell 是一个用 C 语言编写的程序,是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Ken Thompson 的 sh 是第一种 Unix Shell。 ===语法=== ====环境变量==== . ~/.bash_profile ====转义==== *<nowiki>''</nowiki> 单引号,硬转义,所有的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` # date "+%Y-%m-%d %H:%M:%S `echo "abc"`" # 比较常见的用法 ## m02(10.10.137.188) HOST=`hostname` IP=`ping $HOST -c1|xargs|awk -F')' '{print $1}'|awk -F'(' '{print $2}'` echo "$HOST($IP)" IP=`ifconfig | grep 'inet ' | grep -v 'inet 127.0.0.1 ' |awk '/broadcast|Bcast/' | awk '{print $2}'` ====命令行参数判断==== 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 ==== current directory ==== curdir=$( pwd ) curdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" BASH_SOURCE[0] 等价于 BASH_SOURCE, 取得当前执行的 shell 文件所在的路径及文件名。 上一级目录 predir="$( cd .. pwd )" ====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 如果文件是软链接,则为真 ====按行读文件==== while read LN do echo ${LN} done < ${LN_NAME} cat ${LN_NAME} | while read LN do echo $LN done for FN in ${LN_NAME} do echo ${FN} done ====遍历当前目录下的文件==== for FN in ${FILENAME}* do echo ${FN} done ====遍历当前目录下的目录==== find /u01/* -maxdepth 0 -type d # 遍历当前目录下的文件 find /u01/* -maxdepth 0 -type f ==== 读变量列表 ==== HN_L=( 192.168.0.110-node01 192.168.0.120-node02 192.168.0.130-node03 ) for F in ${HN_L[*]};do HN=`echo $F|cut -d '-' -f1` ND=`echo $F|cut -d '-' -f2` echo ${HN} ${ND} done ====循环==== CS=2 for (( i=1; i<=${CS}; i++ )) do echo $i done ====字符串 子串==== # 包含 <nowiki>[[ $string =~ $sub]]</nowiki> # 开头 <nowiki>[[ $string = $sub*]]</nowiki> # 结束 <nowiki>[[ $string = *$sub]]</nowiki> # 正则 <nowiki>[[ $string =~ ^.*$sub.*$]]</nowiki> <nowiki>[[ $string =~ ^$sub.*$]]</nowiki> <nowiki>[[ $string =~ ^.*$sub$]]</nowiki> ====字符串 按分隔符取段 ==== # a bc 1 --> a bc STR1=${STR1% *}--> a bc STR1=${STR1%% *} --> a # a bc 1 --> bc 1 STR1=${STR1#* } STR1=${STR1##* } --> 1 # cut echo $STR1 |cut -d ' ' -f2 echo $STR1 |cut -c 1-4 ====计算 ==== V1 = $(expr $1 - $2) # 须有空格 let V1=$1-$2 # 须无空格 ====计算主机线程数-10==== threads=$(expr `cat /proc/cpuinfo |grep processor|wc -l` - 10) let c=`cat /proc/cpuinfo |grep processor|wc -l`-10 ====特殊字符 ==== PA=$(echo -ne '\004') ====参数==== ====管道==== read VAR1 # 可从标准输入或管道接收 ====sleep==== time sleep 0.030 real 0m0.032s user 0m0.000s sys 0m0.002s ====LOG Format ==== [[分类:Develop]] [[分类:Linux]] [[分类:Shell]]
返回
Shell基础
。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
目录
文章分类
侧边栏
帮助
工具
链入页面
相关更改
特殊页面
页面信息