shell脚本学习(一)[shell介绍,格式说明,管道符及变量赋值]

假期是一个可自由支配的、不太容易被别人打扰的、独自学习的好机会,尤其是对于我这样一个平时还要做试验出data的生物狗来说,更是千载难逢的好机会。之前对shell脚本零零散散地看过,但并不系统,所以通过假期拿出大块的时间来学习。我主要是通过学习极客时间尹会生老师的课“Linux实战技能100讲”,从视频课中记录笔记及加上自己的一些看法和日常练习。希望过完春假,我能独立写一个简单的脚本,让我的双手从单行命令中解放出来。

shell脚本学习

chapter1 什么是shell

1.shell是命令解释器,用于解释用户对操作系统的操作。

2.shell有很多种,cat/etc/shells

3.CentOS7 默认使用的shell是bash,是基于bsh,把bshell好用的功能拿过来,a是again的意思。

4.把脚本写好,用户不用编写程序,也不用开发复杂的C语言。

Chapter 2 linux启动过程

主要是讲了系统自带的shell脚本,对于我而言超纲了,且目前用不到,跳过。

Chapter3 shell脚本的形式

1.UNIX的哲学:一条命令只做一件事。

2.为了组合命令和多次执行,使用脚本文件来保存需要执行的命令。

3.赋予该文件执行权限(chmod u+rx filename)

一个简单的脚本文件举例:

#进入文件路径并查看内容,显示当前目录和大小
vim 1.sh
cd /var/ ; ls ;pwd ; du -sh #在脚本文件中去掉冒号并变成多行
#赋予权限
chmod u+x 1.sh
#查看其权限
ls -l 1.sh
#运行1
bash 1.sh 
#运行2,用系统自带的bash 
./1.bash

在vim中脚本中进行声明,解释该脚本用什么来编写,如 #!/bin/bash
声明之后再加注释,格式为 #demo

标准的shell脚本要包含哪些元素

1.Sha-Bang:以#!为开头的声明

2.命令

3."#"开头的注释

4.chmod u+rx filename 可执行权限

Chapter4 脚本不同执行方式的影响

5.执行命令

5.1 bash ./filename.sh 可以不赋予执行权限,内建命令会对当前环境造成影响。
5.2./filename.sh 必须要有可执行权限。

5.3 source ./filename.sh

5.4 . ./filename.sh

5.3和5.4与上述两个不同,是在当前路径进行执行,内建命令不产生子进程,会对当前环境造成影响。如果有cd命令,脚本运行结束后当前路径也会发生变化。5.1和5.2运行后会产生新的子进程,运行结束后再从子进程回到父进程,如果脚本中有cd命令,脚本结束后会回到当前目录,所以对当前环境没有影响。

举例:

vim 2.sh
#!/bin/bash
# demo

内建命令和外部命令的区别

1.内建命令不需要创建子进程,如cd,pwd。

2.内建命令对当前Shell生效。

Chapter 5 管道

1.管道与管道符

1.1管道和信号一样,也是进程通信的方式之一。

举例:

cat | ps -f

管道符与分号不同,分号是执行完一条命令,再执行下一条命令,管道符是将上一条命令的结果传递给下一条命令,并会为这两条命令建立子进程,避免在管道府中使用内建命令,如cd,pwd。

1.2匿名管道(管道符)是Shell编程经常用到的通信工具。

1.3管道符是"|",将前一个命令执行的结果传递给后面的命令,可多个程序连用。如ps | cat,echo 123 | ps

2.子进程与子shell

Chapter6 重定向符号

重定向符号

1.一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符。

2.输入重定向符号"<"

read var < /path/to/a/file

3.输出重定向符号 ">" ">>" "2>" "&>"

echo 123 > /path/to/a/file

>会把文件里的内容清空,再输入到新的文件,>>会把当前内容保持不变,然后在下一行进行追加。2>错误重定向,如果当前命令产生了错误,会把错误重定向到文件中,而不会打印到屏幕。&>无论内容正确还是错误都会把文件输出到文件中。

举例:

输入重定向
usage:
命令 < file
#加入输入重定向,对输入文件进行计数
wc -l < /etc/passwd 
#查看变量内容
echo $变量名
输出重定向
echo $var2 > b.txt #使用'>'会将原来b.txt里面的内容清空再添加进新内容。'>>'为追加重定向,会在原文件的基础上,再添加新内容。

4.输入和输出重定向组合使用

cat > /path/to/a/file << EOF

I am $USER

EOF 结束脚本

举例:

vim 3.sh
#!/bin/bash
cat > /root/a.sh <

Chapter7 变量赋值

1.变量的定义

1.1变量名的命名规则

1.1.1 有意义的字母,数字,下划线

1.1.2 不以数字开头(硬性规则)

2.变量的赋值

2.1 为变量赋值的过程,称为变量替换。

2.1.1变量名=变量值,如a=123。赋值时等号左右两侧不允许出现空格,若有空格,则空格前面的内容会被当成命令。

2.1.2使用let为变量赋值,如 let a=10+20

2.1.3将命令赋值给变量(不常用),如l=ls

2.1.4将命令结果赋值给变量(常用,为系统节约资源),使用$()'',如letc=$(ls -l/etc),cmd1='ls /root'

举例:

#将命令的结果赋给bash
cmd1='ls /root'
cmd2=$(ls /root)

2.1.5变量值有空格等特殊字符可以包含在""或''中。

string1="hello bash" #双引号里面嵌套单引号或单引号里面嵌套双引号。
echo $string1

你可能感兴趣的:(shell脚本学习(一)[shell介绍,格式说明,管道符及变量赋值])