🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 实用篇 ## 1.shell判断字符串或者read的是否为数字 ``` read -p "Please select the operation number you need to perform:" input #判断输入是否为数字 expr $input "+" 10 &> /dev/null if [ $? -eq 0 ];then echo "$1 is number" else echo "$1 not number" fi ``` ## 2.shell脚本只列出目录下的所有文件 ``` files=$(ls -l ./ |awk '/^-/ {print $NF}') echo index=1 for sfile in $files #加载功能 do echo ${index}.${sfile} index=$[$index+1] done ``` ## 3.列出当前目录下所有文件夹 ``` #获取当前路径下所有文件夹名称 dir=$(ls -l ./ |awk '/^d/ {print $NF}') cnt=1 for i in $dir do linux_list[cnt]=$i #存储菜单到数组linux_list echo ${cnt}.${linux_list[cnt]} cnt=$[$cnt+1] done ``` ## 4.读取文件第n行内容 ``` content=`awk 'NR==2' ${sfile}` #读取文件第2行内容 ``` ## 5.删除、替换字符串中指定的字符 ``` text="#1234455#rr" # 只替换字符串中第一个#为- text=${text/#/-} # 替换字符串中所有#为- text=${text//#/-} ``` 注意:使用替换当然可以实现删除指定字符的目的。 ## 6.目录路径截取 ``` FILE=/home/yhp/prj appname=${FILE##\*/} #扫描字符,截取最有一个/符号后面的字符出来 ``` ## 7.获取时间日期并打印 ```bash starttime=$(date +%Y-%m-%d\\ %H:%M:%S) echo $starttime ttime=`date +"%Y-%m-%d %H:%M:%S"` echo $ttime ``` ## 8.将变量写入文件和从文件读取变量的一中方法 ``` #!/bin/bash #[shell] #将shell中使用的变量存入文件中,以及从文件调取变量 ################################################ #文件中的格式为 VAR= 变量 #注意上面的等于号后面一定要有个空格才行 #假设var.dat文件中有一行为 VAR= yuan-hp #那么脚本读取就是 var=`awk ’/VAR=/{print $2}‘ var.dat` #其实就是读取该行第二例,所以按空格分列,你的变量不能含有空格 #当然可以通过-F参数自定义分隔符号来实现空格额问题 ################################################ clear echo "LOG | 开始执行 var_to_file.sh脚本" VAR=./tmp/var.dat #文件路径 #新建文件用于测试 if [ ! -f $VAR ];then #没有文件则创建文件 echo "LOG | 生成变量存储文件:$VAR" echo "VAR_PATH= $VAR">$VAR echo "A=123">>$VAR echo "B=324">>$VAR echo "STR=sfgrtt">>$VAR fi #从文件读取变量 A=`awk '/A=/{print $2}' $VAR` B=`awk '/B=/{print $2}' $VAR` STR=`awk '/STR=/{print $2}' $VAR` VAR_PATH=`awk '/VAR_PATH=/{print $2}' $VAR` echo "A=$A" echo "B=$B" echo "STR=$STR" echo "VAR_PATH=$VAR_PATH" ``` 自定义分隔符: ``` clear echo "LOG | 开始执行 var_to_file.sh脚本" VAR=./tmp/var.dat #文件路径 #新建文件用于测试 if [ ! -f $VAR ];then #没有文件则创建文件 echo "LOG | 生成变量存储文件:$VAR" echo "VAR_PATH=$VAR">$VAR fi #从文件读取变量 A=`awk -F'=' '/A=/{print $2}' $VAR` B=`awk -F'=' '/B=/{print $2}' $VAR` STR=`awk -F'=' '/STR=/{print $2}' $VAR` VAR_PATH=`awk -F'=' '/VAR_PATH=/{print $2}' $VAR` if [ -z $A ];then echo A为空 fi echo "A=$A" echo "B=$B" echo "STR=$STR" echo "VAR_PATH=$VAR_PATH" ``` ![](https://img.kancloud.cn/6c/9f/6c9f323d49d726a883a2a3d2d6ba78a2_538x189.png) ![](https://img.kancloud.cn/d4/cd/d4cd0ed1429c73e573980e65ff4ea711_307x196.png) ## 9.linux中bash变量自加方法 [**Linux**](http://www.51testing.com/?uid-225738-action-viewspace-itemid-220988) [**Shell**](http://www.51testing.com/?uid-225738-action-viewspace-itemid-220988)中写循环时,常常要用到变量的自增,现在总结一下整型变量自增的方法。 1. i=`expr $i + 1`; 2. let i+=1; 3. ((i++)); 4. i=$[$i+1]; 5. i=$(( $i + 1 )) ## 10.获取文件大小 ` `可使用`do -b filename`获取,如下: ![](https://img.kancloud.cn/ce/2a/ce2a8bcf68ec6d27acd3a56d13bdf953_620x226.png) 得到文件大小为4bytes ## 11.使用dd实现文件分割 ``` dd的作用是转换和拷贝文件,我们可以利用它来分割文件,相关的选项如下: if=filename:输入的文件名 of=finename:输出的文件名 bs=bytes:一次读写的字节数,默认是512bytes skip=blocks:拷贝前,跳过的输入文件的前blocks块,块的大小有bs决定 count=blocks:只拷贝输入文件的前blocks块 例如,现在有一个文件file,大小为116616字节: [root]# du -b file  116616  file  将其分割为两文件file1和file2,那我们就设置每块为1024字节,将file的前60块放入file1,余下的放入file2: [root]# dd if=file bs=1024 count=60 skip=0  of=file1  [root]# dd if=file bs=1024 count=60 skip=60 of=file2 可以用md5sum验证一下file和file.bak: [root]# md5sum file  3ff53f7c30421ace632eefff36148a70  file  [root]# md5sum file.bak  3ff53f7c30421ace632eefff36148a70  file.bak  可以证明两个文件时完全相同的。 ``` ## 12.查看二进制文件 ``` #使用xxd查看二进制文件内容 xxd hexfile.hex hexdump hexfile.hex ``` ![](https://img.kancloud.cn/7d/47/7d479f900d7db13a35baa31752d20bae_665x400.png) ## 13.获取字符串的长度 ``` len=`echo 'string' |wc -L` #获取字符串长度 ``` ## 14获取当前终端的宽度 ``` col=`stty size|awk '{print $2}'` ``` # 网络篇 ## 1.shel中是一个jq解析json串 语法:jq '.key' ```shell #!/bin/bash #联网随机获取一句语句并显示 while true do clear js=`curl -s https://v1.hitokoto.cn/` text=` echo $js | jq '.hitokoto'` text=${text//\"/} #去除引号 echo $text sleep 5s done ``` ## 2.bash将字符转换为urlencode ``` key=`echo '黄昏' | tr -d '\\n' | xxd -plain | sed 's/\\(..\\)/%\\1/g'` ```