您的位置:首页 > 运维架构 > Shell

linux强大的查询字符匹配命令和shell脚本

2011-07-21 13:36 495 查看
变量:
本地变量:只对当前有效
环境变量:对当前shell和子shell都有效
export A=3 即将A定义为变量,并将3赋值于A
A=3
export A 引用不需要加&
export 也查看环境变量
[root@server56 ~]# export
declare -x CVS_RSH="ssh"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="server56.example.com"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.gbk"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD
declare -x PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"
declare -x PWD="/root"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_CLIENT="192.168.0.211 49242 22"
declare -x SSH_CONNECTION="192.168.0.211 49242 192.168.0.156 22"
declare -x SSH_TTY="/dev/pts/0"
declare -x TERM="xterm"
declare -x USER="root"
DISPLAY:可以定义你在那个桌面
HISTSIZE:表示定义历史命令的数量
HOME:当前的家目录
PS1 基名
env:显示当前变量
主要用于特点环境

特殊变量:bash
$? :上个命令是否执行成功,0表示成功,1-255表示不同的错误
位置变量:$1:直接向脚本传递一个变量
$2, $3,超过10建议加{}
算数运算echo "$[$a+$b]"
"$(($a+$b))"

BASH命令别名:
alias 只对当前有效
当后面的命令有空格时要有引号引起来
alias cdnet='cd /etc/sysconfig/network-scripts'


撤销 unalias
全局:/etc/profile,/etc/profile.d/*,/etc/bashrc
局部:~/.bash_profile,~/.bashrc,~/.bash_logout
profile类:
通常用于设置环境变量,运行用户登录时要执行的一些命令
bashrc类:
设置别名,设置本地变量,只对当前shell有效
shell:
交互式登录式shell:需要用户登录<input type="text"
第一步:读取/etc/profile-->/etc/profile.d/>*-->~/.bash-->~/.bashrc -->/etc/bashrc
非交互式登录式shell:不需要用户登录就能运行的脚本shell
先登录~/.bashrc-->/etc/bashrc-->/etc/profile.d/*
定义别名 声明变量
source /etc/profile重读这个文件
. /etc/profile 重读这个文件 重读不建议
\避免本意
输入输出重定向
默认为标准输入输出
标准输出设备:/dev/stdout,1MONITOR, >
错误输出:/dev/stderr,2,MONITOR, 2>
标准输入设备:/dev/stdin,0表示标准输入,KEYBOARD ,<
合并输出流 &>
>覆盖输出重定向 >>追加输出重定向 2>>错误信息追加重定向 &>>不能追加
set -C强制使用追加禁止使用覆盖
>|强制覆盖
ls /var >> /tmp/var.out 2>> /tmp/var.err
输出流
2>&1 = &>
管道:|用于连接命令 把前一个命令的输出结果当做后一个命令的输入结果
COMMAND | COMMAND | COMMAND | COMMAND
tee将输入流分开
ls /etc | tee /tmp/ls.out | less
多个命令的输出都需要保存到同一个文件
自定义 输出重定向
0,1,2
exec 3> /tmp/myout.out 定义一个固定的文件
ls >&3覆盖到固定的文件
exec 3>&- 撤销
输入用法同上
&> /dev/null 将不要的文件定到数据黑洞
> /dev/null
程序执行流:
顺序执行
选择分支
循环执行:1+...+100
for I in 1 2 3 4 5; do
statement1
statement2
done
1 2 3 4 5 = `seq 1 10`
= $seq 1 10 $
= {1..10}


文本处理命令:
cut -d 指定分隔符 为:
cut -d: -f1去第一段分割

IFS:内置内建换行符
IFS=$‘\n'

grep:
grep,egrep,fgrep
grep [options]“PATTERN[模式]” file
正则表达式:基本正则表达式,扩展正则表达式
元字符 re
grep -i不区分大小写
-v跟默认的动作相反,匹配到得不显示
-n匹配到的再文中显示行号
-A[after]n显示匹配的后面n行
-B[before]n
-C[]n上下文,显示上线n行
--color 把匹配到的高亮显示
-E=egrep
^:定位行首行首匹配铆定
$:行尾定位符
.匹配单个字符
*:匹配前面的字符出现0次或任意次
[]:匹配里面的任意一个
[x-y]匹配范围内的一个
\<
\>
\(..\)
$?:上一个命令执行状态结果
0:执行成功
1-255:失败
短路操作符:
&&:
command && command:前面成功才执行后面
||:前面不成功才执行后面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: