`
hy90171
  • 浏览: 59303 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

linux shell

 
阅读更多

1、"2>&1"含义

例如:command>out.file 2>&1 &

0:表示键盘输入

1:表示屏幕输出
2:表示错误输出

command>out.file是将command的输出重定向到out.file文件,即输出内容不打印到屏幕上,而是输出到out.file文件中。2>&1是将标准出错重定向到标准输出,这里的标准输出已经重定向到了out.file文件,即将标准出错也输出到out.file文件中。最后一个&是让该命令在后台执行。

 

试想2>1代表什么,2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出。
你可以用:
(1) ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
(2) ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中;
(3) ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
(4) ls xxx >out.txt 2>&1, 实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。


为何2>&1要写在后面?
command > file 2>&1
首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
command 2>&1 >file
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。

 

2、shell EOF

Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。如下:
sqlplus $USERID @$OUT_FILE << EOF
    commond内容
EOF

可以把EOF替换成其他东西

意思是把内容当作标准输入传给程序这里再简要回顾一下<<的用法。当shell看到<<的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。

这个分界符可以是你所定义的任何字符串。

 

3、quoting

常用的 quoting 有如下三种方法:

* hard quote:' ' (单引号),所有meta均被关闭,除了自己,只能配对。
* soft quote:" " (双引号),大部份meta都会被关闭,但保留$、`反引号、\反斜杠,自己只能配对。
* escape:\ (反斜线),只有紧接在 \之后的单一meta才被关闭。

 

'(单引号)组合的优先级比\高 echo ‘Hatter\‘s tea party 输出Hatter\s tea party

 

4、命令替换

a. 反引号`
反引号用于设置系统命令的输出到变量,将其看作一条命令执行它,并保存结果。
echo `date`
Sat Nov 20 21:40:47 CST 2010

 

b. $()
count=$(echo $1 | sed 's/^-//') #命令替换,相当于``反引号,用于赋值
` ` 需要额外的逃脱符( \` )处理,而 $( ) 則比较直观。
command1 `command2 `command3` `
原本的意图是要在 command2 `command3` 先將 command3 提换出來给 command 2 处理,然后再将结果传递給 command1 `command2 ...` 來处理。
然而,真正的结果在命令行中却是分成了 `command2 ` 与 `` 兩段。
正确的输入应该:command1 `command2 \`command3\` `
要不然,换成 $( ) 就没有问题了:
command1 $(command2 $(command3))

 

5、wildcard

wildcard匹配符号,在Command Line的位置里, wildcard只作用于argument的path上.

a  *  匹配任意
b  ? 匹配单个字符
c  [] 匹配字符集 :[a-zA-Z] [!a-z],前面加!全否定;用[\!]匹配!
d  {string1,string2...} 匹配字符串  a{ss,dd,ee}m 匹配 assm addm aeem  {2..5}  2 3 4 5


tips:
a. *.txt 并不能匹配 .txt 但可匹配 1.txt 这样的路径名称.
b. 1*txt 及 1?txt 均可匹配 1.txt这样的路径名称

 

6、shell 语法(if后面需要空格)

#!/bin/bash 

function myfun()
{
    echo "myfun"
    return 0
}

#判断标准输入中是否包含hello
#if后面接命令
if grep "hello" >/dev/null 2>&1 ;then
    echo "include hello"
else
    echo "don't include hello"
fi

#if后面接函数调用
if myfun ;then
    echo "myfun success"
else
    echo "myfun error"
fi

#if后面接test语句 
read T
if [ "$T" -lt "10" ] ;then 
    echo " T < 10"
elif [ "$T" -le "20" -a "$T" -ge "10" ] ;then 
    #[]中应该使用-a -o 而不是使用&& ||
    echo " T >= 10 && T <= 20 "
else 
    echo " T > 20"
fi

 7、逻辑表达式

[ -f "somefile" ] :判断是否是一个文件
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
[ -n "$var" ] :判断$var变量是否有值
[ "$a" = "$b" ] :判断$a和$b是否相等
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真

含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在

 

if 条件判断中有多个条件
#!/bin/bash
score=$1
if [ $score = 5 ]||[ $score = 3 ];then
    echo right
else
    echo wrong
fi

#!/bin/bash
score=$1
if [ $score -gt 15 ]||([ $score -lt 8 ]&&[ $score -ne 5 ]);then
    echo right
else
    echo wrong
fi


-------------------------------------------------------

或:
#!/bin/bash
count="$1"
if [ $count -gt 15 -o $count -lt 5 ];then
   echo right
fi

且:
#!/bin/bash
count="$1"
if [ $count -gt 5 -a $count -lt 15 ];then
   echo right
fi
-------------------------------------------------------

记住必须加两个中括号
score=$1
if [[ $score -gt 15 || $score -lt 8 && $score -ne 5 ]];then
    echo right
else
    echo wrong
fi

  

 

8、循环自增(if后面需要空格)

for info in $infos
do
        let i++
        if [ $i -eq 1 ];then
                value+="`jstack $info | grep BLOCKED -c` $info $HOSTNAME "
        elif [ $i -eq 2 ];then
                value+=$info
                value+="\n"
                i=0;
        fi
done

#循环参数
ARGS=($*)
for ((i=0; i<${#ARGS[@]}; i++)); do
	echo ${ARGS[$i]}
done

 

分享到:
评论

相关推荐

    linux shell学习资料

    在本学习资料包中,包含了三本关于Linux Shell的重要书籍:《Linux Shell编程艺术》、《Linux Shell脚本攻略》以及《Linux Shell从入门到精通》,这些资源将帮助你全面深入地理解和掌握Linux Shell。 《Linux Shell...

    LinuxShell编程基础教程.pdf

    Linux Shell 编程基础教程 本资源为 Linux Shell 编程基础教程,涵盖了 Linux Shell 编程的基础知识,包括语法基本介绍、变量、环境变量、Shell 命令和流程控制等。 一、语法基本介绍 在 Linux Shell 编程中,...

    linux shell 视频教学

    Linux Shell是Linux操作系统中不可或缺的一部分,它是一种命令行接口,允许用户通过文本命令与系统进行交互。Shell脚本则是编写的一系列命令,可以自动化执行一系列任务,极大地提高了工作效率。在这个"Linux Shell...

    Linux shell脚本全面学习

    Linux shell 脚本全面学习 Linux shell 脚本是 Unix LIKE 系统中的一种脚本语言,用于自动执行某些任务。通过学习 Linux shell 脚本,可以让用户更方便地管理和维护操作系统。 1. Linux 脚本编写基础 在 Linux 中...

    linux Shell编程入门 实例讲解详解

    Linux Shell编程入门实例讲解详解 Linux Shell编程是Linux系统中一种非常灵活的工具,通过shell编程可以自动化大量的任务,especially适合那些易用性、可维护性和便携性比效率更重要的任务。下面是Linux Shell编程...

    Linux Shell Scripting Cookbook(3rd) mobi

    Linux Shell Scripting Cookbook(3rd) 英文mobi 第3版 本资源转载自网络,如有侵权,请联系上传者或csdn删除 查看此书详细信息请在美国亚马逊官网搜索此书

    Linux Shell Scripting Cookbook.epub

    Proper usage of shell commands can easily solve many complex tasks with a few lines of code, but most linux users don't have the right know-how to use the Linux shell to its full potential. ...

    Linux Shell Scripting Cookbook Third Edition

    Linux Shell脚本手册 - 第三版,. This book will take you through useful real-world recipes designed to make your daily life easier when working with the shell.

    Linuxshell编写demo

    在IT行业中,Linux Shell编程是系统管理员和开发者必备的技能之一。它允许用户通过命令行接口与操作系统进行交互,执行自动化任务,大大提高工作效率。本文将深入探讨Linux Shell编写的基础知识,包括基本概念、常用...

    Linux Shell Scripting Cookbook Second Edition

    《Linux Shell Scripting Cookbook 第二版》是一本系统讲解Linux Shell脚本编写方法的书籍,涵盖了超过110个实用的配方,用于解决真实世界中的Shell脚本问题。通过这些配方,读者可以学习到如何利用Shell脚本自动化...

    linuxshell

    根据提供的信息,我们可以推断这本书主要讨论的是Linux Shell的相关内容。由于给定的部分内容只包含了一个网站链接(www.linuxidc.com),我们无法从中直接提取到具体的知识点。因此,接下来将基于“Linux Shell”这...

    Linux Shell Scripting Cookbook.mobi

    Proper usage of shell commands can easily solve many complex tasks with a few lines of code, but most linux users don't have the right know-how to use the Linux shell to its full potential. ...

    linux shell 编程经典 教程

    Linux Shell编程是Linux系统管理与自动化任务处理的重要组成部分。Shell是一种命令行解释器,它提供了与操作系统交互的接口,允许用户执行系统命令、编写脚本并进行文件操作。本教程将深入探讨Linux Shell编程的经典...

    LinuxShell自动化运维-课后习题答案.docx

    Linux Shell 自动化运维课后习题答案 本文档提供了 Linux Shell 自动化运维课后习题答案,涵盖了 Linux Shell 编程、自动化运维等方面的知识点。 一、Shell 编程基础 1. Shell 变量:在 Shell 中,可以使用变量来...

    linuxshell专题讲座.docx

    Linux Shell是Linux操作系统中的一种命令解释器,它允许用户与操作系统内核进行交互,执行各种命令和脚本。shell不仅是一个程序,同时也是一种强大的程序设计语言。在Linux中,有多种类型的shell,如ash、bash、ksh...

    LinuxShell编程基础.pdf

    Linux Shell 编程基础 Linux Shell 编程基础是 Linux 操作系统中一个非常重要的组件,它提供了一个交互式命令行界面,允许用户输入命令来执行各种操作。在 Linux 系统中,Shell 是一个命令解释器,它可以解释用户...

    Linux Shell编程从入门到精通

    本书由浅入深、循序渐进地详细讲解了LinuxShell编程的基本知识。这些基本知识包括Shell编程的基本知识、文本处理的工具和方法、正则表达式、Linux系统知识等。  本书旨在通过理清Linux Shell编程的脉络,从基本概念...

    linux shell 编程教材配套PPT

    Linux Shell编程是Linux系统管理与自动化任务处理的重要组成部分。Shell脚本可以理解为Linux环境下的批处理程序,它允许用户通过编写简单的命令序列来执行复杂的任务。这份"Linux Shell编程教材配套PPT"将帮助你深入...

Global site tag (gtag.js) - Google Analytics