shell学习-常用语句

赵家小少爷 2020-01-14

为什么使用shell

可以快速、简单的完成编程,实现自己的想法。Shell非常适合编写小的工具,因为小工具更强调的是易于配置、维护、移植等,而不是执行效率。

当自己的想法确实有必要进行优化,有必要让它更容易修改以及修正设计目的时,可以将shell编写的工具重新用C、C++/python等语言重新实现。

常见的shell有bash/csh/sh等

管道和重定向

ls -al > lsoutput.txt #将ls命令输出的内容重定向到txt文件 在>前加数字 0 1 2 分别代表输入、标准输出、错误输出

参数2可以将错误输出到文件 而标准输出的内容将显示在屏幕上

>> #将输出添加到文件

丢弃不需要保存的输出的方法

Kill -l 1234 >/dev/null 2>&1 #将标准输出与错误输出都丢弃到系统垃圾箱

| 管道 用来连接进程 通过管道连接的进程可以同时运行,并自动协调数据流

1 Ps > psout.txt   #输出ps内容到psout.txt
2 Sort psout.txt > psout.out  #对psout.txt内容进行排序  输出到psout.out中

管道写法

1 Ps | sort | pssort.out    #将ps内容排序后输出

自动搜索文件夹下 所有文件中包含的 某字符串

More $(grep -l POSIX *)    #在当前文件夹下的文件中  搜索POSIX字符串  打印出包含字符串的文件名

创建脚本

1.在脚本第一行添加 #!/bin/sh

2.把脚本设置为可执行 chmod +x 脚本文件名

3.设定脚本的权限

shell语法

1.变量 不需要提前申明,变量被用到时会自动创建,所有变量被看做字符串来存储 获取变量内容用$字符,

若字符串里包含空格,则需要使用括号将字符串括起来,此外,等号两边不能有空格

$() 或 $"" 用变量的值替换此处的内容 注意 $‘‘不发生替换

2.环境变量&参数变量

$0   当前脚本的文件名

$n        传递给脚本的参数n,比如$1表示第一个参数

$#        传递给脚本或函数的参数个数。

$*,  传递给脚本或函数的所有参数

$?        上个命令的退出状态,或函数的返回值。

$$         当前Shell脚本所在的进程ID

$HOME 当前用户家目录

$PS1 给出当前用户名、机器名和当前目录名

$* 在一个变量中列出所有参数 参数间用IFS中第一个字符分隔开

$*的变体 列出所有参数 与IFS无关 参数之间用空格分开

3.条件

test & [ 命令:shell布尔判断命令

检查一个文件是否存在

if test -f fred.c
then
…
fi
#或者
if [ -f fred.c ]
then
…
Fi

4.控制结构

条件判断

if condition
then
statements
else if condition; then
statements
else
statements
fi

循环语句

for variable in values
do
    statements

done
exit 0


while condition; do
    statements

done

   
until condition
do
    statements

done

#until与while的条件测试相反

case variable in
    pattern [ | pattern] …) statements;;
    pattern [ | pattern] …) statements;;
    …
esac

命令列表

  • AND列表

    执行一系列命令,只有在前边所有命令都执行成功的情况下才执行后一条命令

    statement1 && statement2 && statement3 && …

    &&的作用是检查上一条语句的返回值

    AND列表是一系列命令作为一个整体,所有命令都执行,AND才算执行成功

  • OR列表

    执行一系列命令直到一条命令成功为止

函数

function_name (){

statements

}

函数定义需要放到调用之前

当一个函数被调用时,脚本程序的位置参数($*//$#/$1/$2等)都会被替换为函数的参数,当函数执行完,这些参数将会恢复他们之前的值

相关推荐