`

shell编程小点笔记

 
阅读更多

linux shell脚本的一些基础点

1.标准输入和输出 0 1 2
0>;表示stdin标准输入
1>:表示stdout标准输出
2>:表示stderr错误输出

看个例子:
./start.sh >/dev/null 2>&1

1: start.sh 命令脚本
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”

那么本文标题的语句执行过程为:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

一个相对完整的启动方式是

./command.sh >/dev/null 2>1& &(后台进程启动)

2.变量赋值建议不使用空格,因为会被当做命令来处理

3.(())和 $(())之间区别
(()):会将括号内的表达式做运算处理
$(()):当做运算处理,并将结果返回
看个例子;

var1=1;
var2=2;

var3=$((var1 < var2))
var4=$((var1 > var2))
echo 'var3:' $var3
echo 'var4:' $var4

var5=((var1 < var2))    //这句会报错,因为没有返回值,不能对var5进行赋值
echo $var5
---------结果------------
var3:1     // 若是未true 则返回1 。flase 返回0
var4:0

 

4. &&和||
AA && BB  ==== >  if [ A ];then BB ;fi    如果AA成立 才执行BB
常用做法: cd /home/tmp &&rm -rf *
AA || BB  ==== >  if [ A ];then ;else BB ;fi 如果AA 成立的话,那么去执行 BB
常用的做法是 cd /home/tmp || exit 1

5.if 后面跟的是一个条件表达式
语法:
if [ condition ];then do something ; fi

condition 中条件大于 1 即可
if [ -z "$1" ];then echo 'the file is existed' ; fi
if [ grep -P 'bin' fielname|wc -l ]; then do something ; fi

6.touch && echo && {}
touch aa 快速建立一个a文件
touch {1..10}  快速建立文件名从1到10的文件
touch [1..10]  不会建立任何的文件

echo * 
1.若是文件夹有文件或目录,会输出所有的文件或目录
2.若是文件夹为空的话,会输出 *

echo ? //匹配单个字符的文件或是目录并输出
echo {1..10} 输出1-10的数字

通过以上的例子可以看出 {}会是做循环遍历,再看个。

for i in {1..5} ; do echo $i ; done
---------结果如下所示:---------
1
2
3
4
5

 

7.几个特殊符号
1.`` 执行符号中的脚本并发挥结果
2.~  指定到 /home/loginid
3.基本的shell命令都是以 空格作为分隔符 例如 awk 等
4."" , '' 输出字符串

   aa=1
   echo "$aa"      // 1
   echo "\$aa"     // $aa
   echo '$aa'      // $aa

 

   若是中间包含 $aa 则解析该变量,得到1 ,若是不想解析 \$aa 这样输出的就是 $aa

8.参数变量
$#: 获取参数个数
$?: 上一个命令结果 成功是 0 失败为1
$@: 输出参数
$*: 输出参数
"$@" 返回一个数组

# !/bin/bash

for i in "$@"
do
    echo $i
done
------------
./para.sh 11 ee ff
11
ee
ff

 

"$*" 返回一个字符串

for i in "$*"
do
    echo $i
done
-------------
./para.sh 11 22
11 22

 

不加双引号的 $@和$*基本没什么区别

 

$#的几个特殊用处

 var=1abcdefg
 echo ${#var}   --- 8
 echo ${var:0:5} --- 1abcd
 echo ${var/1*/5678} --- 5678

 

$$: 当前的进程号 没什么用处
 
 设置局部变量 local  没什么特别的 ,变量不加 local ,那么就是全局的

 
 9。命令执行的顺序
 1.alias 定义的命令
 2.function定义命令
 3.内部命令 系统自身带的命令  一般也是默认$PATH
 4.外部命令  $PATH中另外加的
 
 
 10.命令行中几个快捷键
 ctrl + w  :删除最后一个输入 以空格为分隔符
 ctrl + v  :删除一行命令行
 ctrl + y  :撤销上一个命令
 ctrl + a  :移动到命令行首
 ctrl + e  :移动到命令行尾

 11.nuhup 就是以后台程序启动程序 ,也可以说是精灵进程
 nohup command &
 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
 
 更倾向于直接使用 & 来简单
 
 12. grep 的几个使用小技巧
 grep -v  "hah" filename : 查询非hah的数据
 grep -o  使用正则表达式
 grep -P  使用Perl的正则表达式
 grep "line 5" filename -A1 :匹配到数据后再将下一行的数据显示出来
 grep "line 5" filename -B1 :匹配到数据后再将上一行的数据显示出来
 grep -n :匹配到数据后,除了显示匹配的内容外,另外显示行号
 
 
 13. sed 和 awk 较为复杂,另作笔记吧
 
 
 
 
  

分享到:
评论

相关推荐

    Linux零基础学习笔记 Shell编程-菜鸟入门(超详细)

    Linux是开源的操作系统,它的命令行界面,尤其是Shell编程...因此,无论你是技术小白还是希望进一步提升,这份“Linux零基础学习笔记 Shell编程-菜鸟入门”都会是你宝贵的资源。祝你在学习的道路上越走越远,不断进步!

    《LINUX与UNIX SHELL编程指南》读书笔记.pdf

    《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和Unix系统下Shell编程的经典书籍,通过对这本书的读书笔记分析,我们可以提炼出一系列关键的知识点,涵盖了系统管理、服务配置、软件更新以及网络服务配置等方面...

    shell编程指南读书笔记.pdf

    Shell编程指南读书笔记详细解读了shell脚本编写的基础知识和进阶技能。通过阅读该笔记,无论是新手还是有一定基础的程序员,都能够快速掌握shell脚本编写技巧,并为未来的学习奠定坚实的基础。 在文件安全与权限...

    《LINUX与UNIX SHELL编程指南》笔记

    《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和Unix系统中shell编程的权威...阅读《LINUX与UNIX SHELL编程指南》和其读书笔记,是掌握这些技能的有效途径。同时,不断实践和调试脚本,也是提升技能的关键步骤。

    shell 笔记

    Shell笔记涵盖了多个重要的Shell编程和命令行操作知识点。以下是对这些知识点的详细解释: 1. `echo` 和 `printf -e` 命令:`echo` 用于打印字符串,而`printf`更灵活,支持转义序列如`\n`(换行),`-n`选项则用于...

    LINUX与UNIX%20SHELL编程指南

    《LINUX与UNIX SHELL编程指南》是一本深入讲解Linux和UNIX Shell编程的经典书籍,作者张启峰在读书笔记中不仅归纳总结了书中的核心概念,还提供了丰富的实践示例,旨在帮助读者全面掌握Shell编程技能。以下是根据...

    linux运维学习笔记:Shell变量.pdf

    在Linux Shell编程中,变量是存储数据的基本单元。变量可以看作是一个容器,用于临时存储字符串、数字等数据类型,包括但不限于路径、命令结果等。变量通过赋值操作符“=”进行赋值,如“x=1”表示将数字1赋值给变量...

    GNU_LINUX 系统编程笔记.pdf

    以上是基于《GNU/Linux系统编程笔记》中的知识点总结,涵盖了错误处理、I/O操作、文件目录管理、进程控制、线程、内存管理、IPC以及守护进程设计等关键领域,对于深入理解Linux系统编程有重要价值。

    shell学习笔记

    在深入探讨Shell学习笔记之前,我们首先理解一下Shell的基本概念。Shell不仅允许用户执行命令,还可以通过脚本编程实现自动化任务。以下是关于Shell变量命名规则和使用的详细说明: 1. **变量与内容的连接**:在...

    linux运维学习笔记:Shell函数.pdf

    此外,Shell编程中还可以创建函数库,以便在多个脚本中重复使用这些函数。一个简单的函数库可能会包含初始化函数、日志记录函数等,以便统一管理脚本的执行和日志记录。例如,可以创建一个自定义的常用函数库`...

    总结搜集的shell脚本学习笔记(完结篇).pdf

    #### 十六、编程小结 Shell脚本编程涵盖了从基本的条件控制、循环到更高级的功能,如函数定义、字符串处理和数组操作等。掌握这些基础知识对于编写高效的Shell脚本至关重要。 以上就是文档《总结搜集的shell脚本...

    Linux系统编程学习笔记

    ### Linux系统编程学习笔记 #### 一、IO **1.1 标准I/O (stdio)** - **fopen/fclose**: `fopen` 用于打开或创建一个文件,并返回一个指向该文件的 `FILE *` 类型的指针。`fclose` 用于关闭由 `FILE *` 指向的文件...

    UNix系统编程笔记

    ### Unix系统编程基础知识点 #### 一、Unix系统概述 - **系统架构**:Unix系统是一种多用户、多任务的操作系统,它具有丰富的文件管理和网络通信功能。在系统架构方面,Unix可以分为以下几层: - **操作系统层**...

Global site tag (gtag.js) - Google Analytics