Shell脚本学习指南读书笔记(一)

版权声明:每天要问下自己:“昨天的自己与今天的自己有啥区别?” https://blog.csdn.net/u010921682/article/details/83144228

第1章 背景知识略

第2章 入门

编译型语言
优点:高效
缺点:多半运作于底层,处理字节、整数或其他机器层级的对象(C++中就很难将一个目录所有文件复制到另一个目录中)
脚本编程语言
通常是解释型的,这类程序是解释器读入程序代码,转换成内部形式再执行(解释器本身是一般的编译型程序)

为啥使用Shell脚本?
好处:运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象
缺点:效率不如编译型语言


命令

who
用途:现在系统中有谁在登录

[liujing@localhost ~]$ who
liujing  :0           2018-10-18 11:17 (:0)
liujing  pts/0        2018-10-18 11:17 (:0)

wc
用途:数字计算,算出 行数line、字数word、字符数character
| (一个竖线,管道符号)
用途:在两个程序之间建立管道pipeline

[liujing@localhost ~]$ who | wc -l
2

who的输出,成了wc的输入,wc所列出的结果就是已登录用户的个数

将命令转在一个独立的命令

[liujing@localhost ~]$ cat > nusers
who | wc -l
CTRL+D    表示 end-of-file
[liujing@localhost ~]$ chmod +x nusers 
[liujing@localhost ~]$ ./nusers 
2

小型Shell脚本开发周期:

  1. 直接单独测试每个命令行
  2. 将它们一起放在一个独立的脚本里
  3. 将这个独立的脚本设置执行权限
  4. 在使用时可直接执行该独立脚本

Shell执行一个程序时:

  1. 要求Unix内核启动一个新的进程以便在该进程里执行指定的程序,内核知道如何为编译型程序做这件事
  2. Shell脚本不是编译型程序,当Shell要求内核执行它时则无法做到(错误信息:not executable format file 不是可执行的格式文件)
  3. Shell收到错误信息会启动一个新的/bin/sh(标准Shell)副本来执行该程序

#!
告知UNIX内核应该以哪个Shell来执行所指定的Shell脚本

#! /bin/sh

该行长度最好不要超过64个字符

#! /bin/sh -

- 表示没有Shell选项,这是基于安全考虑,可避免某种程度的欺骗式攻击 spoofing attack

扫描二维码关注公众号,回复: 3776637 查看本文章

重定向
<
>

- - 表示选项结尾(PS:这不是很理解)
; 分隔同一行多条命令
& 在后台执行命令,意味着不用等命令完成,就可以执行下条命令

三种基本命令

  1. 内建命令
  2. Shell函数
  3. 外部命令

Shell 变量名称 开头是一个字母或下划线
变量赋值,中间没有任何空格
要赋值的值包含空格,要加引号
取出变量值用$

name1=liujing
name2=$name1
name3=" $name1 $name2"

输出
echo 会自动加换行符
printf 不会自动加换行符

重定向
< 改变标准输入
> 改变标准输出
>> 以附加的形式加到文件结尾
| 将左边的标准输出变为右边的标准输入

tr
在这里插入图片描述

/dev/null 传送到此文件的数据都会被系统丢掉
/dev/tty 自动重定向到一个终端

stty -echo 关闭自动打印输入字符的功能
stty echo 打开自动打印输入字符的功能

stty(set tty)

$PATH
: 分隔

echo $PATH

.profile
::

参数
$1 ~ $9
超过9则使用{ }包起来,如 ${10}

[liujing@localhost ~]$ who
liujing  :0           2018-10-18 11:17 (:0)
liujing  pts/0        2018-10-18 11:17 (:0)
[liujing@localhost ~]$ who | grep liujing
liujing  :0           2018-10-18 11:17 (:0)
liujing  pts/0        2018-10-18 11:17 (:0)
[liujing@localhost ~]$ who | grep pts
liujing  pts/0        2018-10-18 11:17 (:0)

# 为注释
#! 也同样扮演注释的角色

打开及关闭命令追踪

set -x
set +x

猜你喜欢

转载自blog.csdn.net/u010921682/article/details/83144228
今日推荐