Linux_shell_FAQ

2020/09/07 Shell 共 4297 字,约 13 分钟

当前路径

	CURR_DIR=$(cd "$(dirname $0)"; pwd)

{str}应用

{str#*/}
	echo ${str#*/}  删除第一个/及其左边的数据
{str##*/}
	echo ${str##*/} 删除最后一个/及其左边的数据
{str%/*}
	echo ${str%/*} 删除最后一个/及其右边的数据
{str%%/*}
	echo ${str%%/*} 删除第一个/及其右边的

 

记忆方法

键盘上#在$之前,%在$之后,所有,#表示左边,%表示右边,
单个*表示最少匹配,**表示最多匹配

{str:n1:n2}

	${str:0:5} 从第0个字符之后取5个
	${str:5:6} 从第5个字符之后取6个

{str/cisco/h3c}

	${str/cisco/h3c} 将第一个cisco替换为h3c 
	${str//:/-}        将所有的:替换为-

 

{#str}

	${#str} 计算str的长度

{!}的功能

#例子:
#!/bin/sh
a=123
b=a
echo ${b} 
echo ${!b}

 

取awk中的最后一个域

ls `pwd`/csv/* | awk -F '/' '{print $NF}'

 

awk中的if语句

语法:

awk -F ' ' '{if(NR==1) {cols=$1} else{cols=cols","$1}} END{print cols} 

例子:

cat cols_info | awk -F ' ' '{if(NR==1) {cols=$1} else{cols=cols","$1}} END{print cols}

awk中传递shell变量

## '${xy}'是变量
echo $item | awk -F ',' '{print "'${xy}' "$0}' 

传递转义字符

echo $item | awk -F ',' '{print "\t\t"$0}' 

 

sed传递shell变量

语法:

sed -i 's/需替换内容/'"${变量名}"'/g' pgExpInsertSql.tmp
注意: 替换的变量写法规范 单引号+双引号+tab+双引号+单引号

例子:

sed -i 's/pg_insert_sql/'"${tab}"'/g' pgExpInsertSql.tmp

sed匹配任意字符

匹配任意字母,后跟任意字母的0次或多次重复,并以ing结尾,模式为/ . * ing/。可以使用 这个模式查询以ing结尾的任意单词。

sed -n '/.*ing/'p quote.txt

tr替换 [ 或 ]

语法:

echo ‘ | tr '[' '+' 

例子:

echo $item | tr '[' '+' | sed 's/+//g'

     

查看物理内存的信息

查看总值

free -m | grep Mem | awk '{print $2}'

查看已使用的值

free -m | grep Mem | awk '{print $3}'

 

查看文件夹的大小

du –sh 全路径文件夹的名字

查看各个分区的使用情况

df –h

列出分区

fdisk –l 

 

别名的使用

定义

alias 别名='命令语句'

例子

alias mkdir_day='mkdir `date +%Y%m%d`'
alias cd_day='cd `date +%Y%m%d`'

使用

和ls一样的使用方法

取消别名

unalias 别名

 

修改系统时间

修改年月日

Date –s 20150808

修改具体时间

Date –s 08:15:00

修改年月日时分秒

date -s "20150928 16:14:00"

获取格式化时间

date +"%Y%m%d %H:%M:%S"

{}的运用

创建log,ctl,etc三个文件夹
mkdir /home/gploader/{log,ctl,etc}/

 

split的运用

语法:

split -a 10 -d -l 100000 原始文件名  目标文件的前半部分(后半部分会自动生成)

解释:

	-a 10 表示后缀长度为10
	-d   表示后缀用数字表示
	-l 10000 表示将文件按每10000行记录切分成n个文件

例子:

split -a 10 -d -l 100000 bs.bcp  INDEXLEVEL_1_1_STATICSITE_1_

 

判断文件是否存在

	tmp=”文件的路径”
	if [ -f $tmp ];then
		echo "存在"
	else
		echo "不存在!!"
		exit;
	fi

 

判断字符串是否相等

	if [ "${res}" == "${res2}" ];then
		echo "相等"
	else
		echo "不相等"
		exit
	fi

 

显示指定字符串的颜色

语法:

echo –e  "\e[1;31m test \e[0m"

参数说明:

重置0,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,白色37

 

函数的传参

函数定义:

function func()
{
	echo $1
	echo $2}

函数调用:

func 参数1 参数2 …
显示结果:
	Nihao

遍历文件

	while read item
	do
	echo "$item begin "
	done < 文件

FOR循环使用

	for((i=0;i<10000;i++));do  
	cat mode.bcp >> 1_1_1_trappers_1_1.bcp; 
	done;

if分支中and和or的使用

if分支中and的使用

	if [ "$area1"x == "create--table"x  -a  "$area3"x == "("x ]
     then
		echo "hello"
	fi

 

if分支中or的使用

	if [ "$area1"x == "create--table"x  -o  "$area3"x == "("x  ]
	then
		echo "hello"
	fi

 

if中字符串的比较

字符串相等为真

	if [  $str  =  $str2 ];then
		echo "hello"
	fi

字符串不等为真

	if [  $str  != $str2 ];then
		echo "hello"
	fi

字符串长度大于0时为真

	if [ -n $str];then
		echo "hello"
	fi

字符串长度为0时为真

	if [ -z $str ];then
		echo "hello"
	fi

字符串非空时为真

	if[ $str ];then
		echo "hello"
	fi

 

if中数字的比较

数字相等时为真

	if[ $int1 –eq $int2 ];then
		echo "hello"
	fi

数字不等时为真

	if[ $int1 –ne $int2 ];then
		echo "hello"
	fi
# int1大于int2时为真
	if[ $int1 –gt $int2 ];then
		echo "hello"
	fi
# int1大于等于int2时为真
	if[ $int1 –ge $int2 ];then
		echo "hello"
	fi
# int1小于int2时为真
	if[ $int1 –lt $int2 ];then
		echo "hello"
	fi
# int1小于等于int2时为真
	if[ $int1 –le $int2 ];then
		echo "hello"
	fi

if中文件的比较

文件可读时为真

	if[ -r $file ];then
		echo "hello"
	fi

文件可写时为真

	if[ -w $file ];then
		echo "hello"
	fi

文件可执行时为真

	if[ -x $file ];then
		echo "hello"
	fi

文件为正规文件时为真

	if[ -f $file ];then
		echo "hello"
	fi

文件为目录时为真

	if[ -d $file ];then
		echo "hello"
	fi

文件大小非0时为真

	if[ -s $file ];then
		echo "hello"
	fi

 

数字的加法减法

expr方法

		h=`expr $a - 1`h=$(expr 1 + 2)

let方法(“+”中间不能有空格)

		let l=$a+1

 

tar

解压(将delete.tar.gz解压当前的目录下)

	tar zxvf delete.tar.gz ./

压缩(将当前目录下的txt压缩成delete.tar.gz)

	tar zcvf delete.tar.gz  ./*.txt

LINUX退格^H

实现步骤

	1.备份 
	cp ~/.bash_profile ~/.bash_profile.bak
	2.将指令写入.bash_profile
	echo 'stty erase ^H' >>  ~/.bash_profile
	3.使文件在系统中生效
	source   ~/.bash_profile

查找文件或目录

语法:

	locate 查找内容 
注意:
	*表示任意字符
	?表示一个字符

实现逻辑:

	在一个保存了硬盘上目录结构及文件名的数据库中查找,也是因为这个原因对于刚新增,修改,删除的文件和目录,locate可能无法查到,这时需要使用updatedb更新数据库后,就可以查找了

find查找命令

查找/share目录以及子目录下以”D”和”M”开头的文件或目录,”-o”表示前后两个条件中满足一个就显示

	find /share –name D* -o M*

查找/boot目录以及子目录中所有以”.conf”结尾的文件,并把这些文件复制到/tmp目录

	find /boot –name *.conf –exec cp {} /tmp \;

查看文件的行数

	cat 文件名 | wc –l

查看文件的大小

	du –sh 文件名

模糊匹配出文件,并打包成tar包

方法

tar zcvf 名字.tar.gz $(grep -l "模糊匹配内容" 模糊匹配的文件)

例子

tar zcvf tr.tar.gz $(grep -l "#" *)

 

vim配置文件(vimrc)设定

描述

vimrc文件是vim环境设置文件。整体的vim设置在/etc/vimrc文件中。不建议修改/etc/vimrc文件,每个用户可以在用户根目录中设置vim,新建~/.vimrc

常用配置:

:set all                        查看所有选项
:set nu/nonu                    显示行数
:set wrap/nowrap                是否换行
:set hlsearch/nohlsearch        搜索是否高亮显示
:set autoindent/noautoindent    是否自动缩排
:syntax on
:syntax off                     程序语法开关
:set bg=dark                    显示颜色色调
:set bg=light                   显示颜色色调
:set tabstop=4                  tab为4个空格

 

tee命令

描述:

正确的和错误的执行打印在控制台的信息追加一份到文件中

命令:

[command] 2>&1 | tee -a [file]

例子:

echo hello 2>&1 | tee -a 1.log

 

linux下字符编码的转换

将gbk格式的文件转成utf-8格式

iconv -f gbk -t utf-8 "源文件" -o "目标文件"

将utf-8格式的文件转成gbk格式

iconv -f gbk -t utf-8 "源文件" -o "目标文件"

文档信息

Search

    Table of Contents