设为首页 收藏本站
查看: 873|回复: 0

linux shell快速参考

[复制链接]

尚未签到

发表于 2015-10-26 11:03:47 | 显示全部楼层 |阅读模式
*********************************************************************
*1, 文件及权限
*********************************************************************
chmod who [operator] [permission] filename相对模式:
operator: +/-
permission:r,w,x,l(给文件加锁),s(设置文件宿主或组set_ID),t(粘帖位) 绝对模式:
权限: r(2), w(4), x(1)
uid:  owner(set_uid)(2), group(set_gid)(4), 粘帖位(1)
设置uid时把uid的绝对组合数字放在最前面umask:
允许设置文件创建时的缺省模式, 对每一类用户存在相应的mask数字, 对于文件
该值最大为6, 因为系统不允许在创建文件时赋予执行权限, 对于目录来讲最大
值为7, 例子:

(目录) umask: 101    对应的权限为676 *********************************************************************
*2, 文件名替换
*********************************************************************
*  匹配任何字符串
?  匹配单个字符串
[...] 匹配其中的任何字符
[!...]匹配非!之后的字符
*********************************************************************
*3, shell 的输入与输出
*********************************************************************
echo 输出语句
read 变量1 变量2 ...
cat  用来显示文件 分割显示文件 显示控制字符
tee  把一个副本传递到标准输出同时也把另一个副本COPY到相应的文件中shell 3个相关的文件描述符:
0 标准输入
1 标准输出
2 标准错误文件重定向:
>   定向到文件
>>  追加到文件对标准错误重定向时必须是文件描述符:command 0/1/2 >/>> filename
command >/>> filename 0/1/2>&0/1/2
command < filename
command << delimiter 从标准输入中读入直到遇到delimiter分界符
command <&m 把m作为标准输入
command >&m 把标准输出重定向到m中去
command <&- 关闭标准输入  *********************************************************************
*4, shell 命令的执行顺序
*********************************************************************
&&  如:命令1 && 命令2 只有命令1返回真(0),命令2才被执行
||  如:命令1 || 命令2 如果命令1执行失败, 则执行命令2
()  在当前shell执行一组命令, 如(命令1;命令2;...), 如用{}则组中所有的命令的输出
    作为一个整体被重定向时,则放到子shell执行否则放到当前shell执行
   
     *********************************************************************
*5, 文本过滤(正则表达式)
*********************************************************************
^                匹配行首     如^c
$                只匹配行尾   如$c
*                一个单字符后跟*, 匹配0或多个此字符
[]               匹配[]内字符, 可以是单字也可以是字符序列, 也可以使用-表示字符范围,如[1-5]
/                用来匹配一个元字符的特殊含义
.                匹配任意单字符
pattern/{n/}     匹配前面的pattern,n为次数
pattern/{n,/}m   同上但次数至少为n
patterb/{n,m/}   同上但次数在n与m之间  *********************************************************************
*5, awk, 主要用来格式化文本
*********************************************************************
awk脚本:
   可以使用-F指定分割符, 如果未指定则使用空格模式和动作:
   模式可以式任何语句, 模式包含BEGIN和END两个字段, 实际动作在{}内指定, 模式可
   以省略域和记录:
   awk执行时其浏览域标识为$1,$2..., 使用$0表示使用所有域正则表达式:
   除了grep的正则表达式之外,awk还支持另外两个:
   + 匹配一个或多个字符
   ? 匹配模式出现频率,如/XY?Z/匹配XYZ和XZ
   表达式需要用斜线括起来条件操作符:
   <, <=, ==,!=, >, >=, ~(匹配正则表达式), !~(不匹配正则表达式), 如:
   awk '{if($4~/brown/) print $0}' grade.txt符合表达式:
   &&  语句两边必须同时匹配为真
   ||  语句两边必须有一个匹配为真
   !   非内置变量:
   ARGC     命令行参数个数
   ARGV     命令行参数排列, 每个参数使用ARGV[n]访问, 下标以0开始
   ENVIRON  支持队列中系统环境变量的使用, 如ENVIRON["PATH"] = "usr/local/bin"
   FILENAME awk浏览的文件名,
   FNR      浏览文件的记录数
   FS       设置输入域分割符等价于-F选项
   NF       浏览记录的域个数
   NR       已读的记录数
   OFS      输出域分割符, 缺省为空格
   ORS      输出记录的分割符, 缺省为/n
   RS       记录分割符号, 缺省为/n
   
操作符:
   =, +=, *=, /=, %=, ^=
   ? 条件表达式操作符
   ||, &&, !
   ~, !~
   <,<=,==,!=,>,>=
   +,-,*,/,%,^
   ++, --内置字符串函数:
   gsub(r,s),   在整个$0中用s替代r
   gsub(r,s,t)  在整个t中用s替代r
   index(s,t)   返回s中字串t的第一位置
   length(s)
   match(s,r)   测试s是否包含匹配r的字符串
   split(s,a,fs)在fs上将s分成序列a
   sprintf(fmt,exp), 经格式化后的exp
   sub(r,s)     用$0中最左边最长的字符串代替s
   substr(s,p)  返回s中以p开始的部分
   substr(s,p,n)输出函数:
   printf([格式控制符], 参数)
   
   修饰符:
   格式:
   -        左对齐
   .prec    最大字符串长度或小数点右边的位数
   Width    域的步长, 用0表示0步长
   
   格式符号:
   %c       字符
   %d
   %e      
   %f
   %g       awk决定使用哪种浮点数转换e或者f
   %o       八进制数
   %s
   %x       十六进制
   awk数组:
   使用数组前不必定义也不必指定数组元素的个数, 如:
   '{split("123#224#245", myarrary, "#")}'
   
   也可以先定义再使用.
   
   
   
*********************************************************************
*6, sed 文本过滤工具
*********************************************************************
sed [选项] sed命令  输入文件sed [选项] -f 脚本文件 输入文件
查询方式:
   sed默认从第一行开始
   定位方式:
   x   为一行号
   x,y 行范围
   /pattern/ 查询包含模式的行
   /pattern/pattern/ 查询包含两个模式的行
   /pattern/,x  在指定的行上查询包含模式的行
   x,/pattern/  通过行号和模式查询匹配行
   x,y!查询不包含指定行号x,y的行
   
   命令:
   p  打印匹配行
   =  显示文件行号
   a/ 在定位行号后附加新文本信息
   i/ 在定位行号号插入新文本信息
   d  删除定位行
   c/ 用新文本替换定位行
   s  使用替换模式替换相应模式
   r  从另一个文件中读文本
   w  写文本到一个文件
   q  第一个模式匹配后退出
   l  显示与8进制ASCII代码等价的控制字符
   {} 在定位行执行的命令组
   n  从另一个文件中读取下一行, 并附加在下一行
   g  将模式2粘贴到/pattern n/
   y  传送字符
   n  延续到下一输入行, 允许跨行的模式匹配语句
   
   
   例子:
   sed -n '2p' filename 第二行开始
   sed -n '1,3p' filename 1~3行
   sed -n '/pattern/p' filename
   sed -n '4,/pattern/p'
   sed -n '1,$p' filename 显示整个文件, $表示最后一行
   sed -n '/pattern/=' 显示行号
   sed '/pattern/a/text' 附加文本,在指定行后面
   sed '4i/text' 插入文本, 在指定行前面
   sed '/pattern/c/text' 替换指定行
   
   
   
   替换文本:
   [address[,address]] s/pattern-to-find/replace-pattern/[g p w n]
   g  缺省只替换一次出现模式, 使用g替换全局所有模式
   p  缺省sed将所有被替换行写入标准输出,使用p将不打印结果
   w  文件名  将输出定向到一个文件
   
   
   
   
*********************************************************************
*7, 工具
*********************************************************************
tr     字符转换删除和替换
stty   设置终端特性  
*********************************************************************
*8, shell环境及变量
*********************************************************************
本地变量:
variable-name = value 设置实际值到变量
variable-name + value 如果设置了variable-name则重设其值
variable-name :? value 如果未设置variable-name 显示未定义用户错误信息
variable-name ? value  如果未设置variable-name 显示系统错误信息
variable-name := value 如果未设置设置其值, 如果设置则使用原值
variable-namne :- value 如果未设置使用value替换但并不设置value到variable-name, 如果设置
                        则使用其值unset variable 清除变量
set  variable value 设置变量 如果不提供参数则显示所有本地变量测试变量是否设置值:
echo "The file is ${FILE?}"
echo "The file is ${FILE:? sorry ....}"设置只读变量:
readonly variable-name设置环境变量:
export variable-nameenv 显示所有环境变量unset variable 清除环境变量 预留的变量名:
CDPATH  cd 一个目录时查找此变量
EXINIT  保存VI初始化时的设置
HOME    HOME目录
LFS     用来指定shell缺省的分割符
LOGNAME 保存登陆名
MAIL    保存邮箱路径名
MAILCHECK 缺省为每60秒检查一次新邮件
MAILPATH 如果有多个邮箱要用到MAILPATH,此变量将覆盖MAIL设置
PS1     shell提示符,缺省对root为#, 其他用户为$
PS2     shell附属提示符, 缺省为>, 用于执行超过一行的一个命令
SHELL   缺省shell
TERMINFO 终端初始化变量保存终端初始化配置
TERM    终端类型
TZ      时区
EDITOR  缺省的编辑器
PWD     当前路径名
PAGER   屏幕翻页命令
MANPATH man路径
PRINTER 缺省打印机名
向脚本传递参数, 用空格分割, $0~$9 其中$0始终保存的脚本名
特定变量参数:
$#  传递到脚本的参数个数
$*  以单个字符变量显示所有传递的参数,此选项参数可以超过9个
$$  当前脚本进程的ID号
$!  后台运行的最后一个进程的ID号
$@  与$#相同但是使用时加引号
$-  SHELL的当前选项,与set相同
$?  显示命令的最后退出状态, 0为没错误, 其他任何值表示有错误  
*********************************************************************
*9, 引号
*********************************************************************
使用单引号可以引用除字符$,反引号,/以外的任何字符
使用双引号可以引用任何值
使用反引号用于将系统命令输出到变量
反斜线引用特殊字符:&*+^$'""|?  *********************************************************************
*10, 条件测试
**********************************************************************
测试文件状态:
test condition 或 [ condition ] 使用[]要在两边加上空格
-d 目录
-f 正规文件
-L 符号连接
-r 可读
-s 文件长度大于0非空
-w 可写
-u 文件具有suid位设置
-x 可执行
-e 存在
-b 块文件
-c 字符设备文件
-g 设置了guid位
...如: [ -f filename ]
    echo $?
   
测试时使用逻辑操作:
-a 逻辑与 -o 逻辑或 !逻辑非, 如:
[ -w result.txt -a -w test.txt ]字符串测试:
test "string"
test string_operator "string"
test "string" string_operator "string"string_operator:
= 相等
!= 不等
-z 空串
-n 非空串测试数值:
"number" number_operator "number"

[ "number" number_operator "number" ]
-eq 相等
-ne 不等
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于expr 用于数值计算:
exper argument operator argument  **********************************************************************
*11, 控制流结构
**********************************************************************
if-else:
if 条件1
then
   命令1
elif 条件2
then
   命令2
else
   命令3
fi空命令永远为真case 语句:
case 值 in
模式1)
   命令1
   ...
   ;;
模式2)
   命令2
   ...
   ;;
esac
for循环:
for 变量名 in 列表
do
   命令1
   命令2
   ...
done
until循环:
until 条件
do
   命令1
   命令2
   ...
done
while 循环:
while 命令
do
   命令1
   命令2
   ...
done 可以使用break continue 控制流程, 对case及循环有效  *********************************************************************
*12, shell 函数
*********************************************************************
格式:
函数名()
{
命令1
命令2
} 或
函数名() {
}也可以在函数名前面加上function参数传递:
和在shell中使用参数一样如$1 ~ $9, 如:test() {
   echo $1
   echo $2
   echo $3
}
调用: test 1 2 3函数返回:
return 返回用最后的命令状态决定返回值
return 0
return 1在shell中定位文件:
定位格式为:
. pathname执行函数:
函数名  参数 ...删除函数:
unset 函数名
*********************************************************************
*13, 向脚本传递参数
*********************************************************************
shift 命令:
他每执行一次参数个数减一且值向前移动一位,如:
while [ $# -ne 0 ]
do
   echo $1
   shift
done  ********************************************************************
*14, 创建屏幕输出
********************************************************************
tput:
    字符输出:
    bel       警铃
    blink     闪烁
    bold      粗体
    civis     隐藏光标
    clear     清屏
    cnorm     不隐藏光标
    cup       移动光标位置到x,y
    el        清除到行尾
    ell       清除到行首
    smso      启动突出显示
    rmso      正常显示
    smul      开始下划线模式
    rmul      停止下划线模式
    sc        保存当前光标位置
    rc        恢复光标位置
    sgr0      正常屏幕
    rev       逆转视图
   
    数字输出:
    cols      列数目
    it        TAB设置宽度
    lines     屏幕行数
   
    布尔输出:
    chts  光标不可见
    hs    具有状态行例子, 使用布尔输出:
    STATUS_LINE=`tput hs`
    if $STATUS_LINE; then
      echo "Your terminal has a status line"
    else
      echo "Your terminal don't has a status line"
    fi
   
   
使用颜色:
    前景色:
    30(黑)  31(红)  32(绿)  33(黄)  34(蓝)  35(紫) 36(青) 37(白)
    背景色:
    40(黑)  41(红)  42(绿)  43(黄)  44(蓝)  45(紫) 46(青) 47(白)
   
    颜色格式:
    <ESCAPE>[background_number;foreground_number]m
    例子:
    echo -e "/033[40;32m"

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130899-1-1.html 上篇帖子: 【shell】expr 字符串截取功能 下篇帖子: Bash 实例,第 1 部分:Bourne again shell (bash) 基本编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表