Linux命令行与shell脚本编程 3e

2020-09-29  本文已影响0人  zzzzzzzeng

第三章 基本的bash shell命令

3.3 bash手册

man keyword / keyword -help

3.4浏览文件系统

cd
相对路径,绝对路径,当前目录,父目录 ,根目录
.. . ./ ~

ls

3.6 处理文件

创建 touch

复制 cp source destination

cp /etc/NetworkManager/NetworkManager.conf  .

链接文件

移动或重命名文件:mv

3.6删除文件:rm

3.7 处理目录

3.7.1创建目录 mkdir

3.7.2 删除目录

3.8查看文件内容

3.8.1查看文件类型 file

3.8.2 查看整个文件

1) cat

3.8.3查看部分文件:tail/head

tail/head file_name:显示最后/开头10行
tail -n num 显示最后num行文本

第四章 更多的bash shell 命令

4.1检测程序

4.1.1 探查进程 ps

ps的3中命令行参数类型:Unix, BSD, GNU 单破折线/无破折线/双破折线

4.1.2事实监测进程 top

4.1.3结束进程

kill命令
kill [pid]
killall命令:通过进程名来识别需要结束的任务
kill process_name 可以使用通配符

4.2监测磁盘空间

第6章 使用Linux环境变量

6.1 什么是环境变量

用于储存有关shell会话和工作环境的信息
分为全局变量和局部变量

6.1.1全局环境变量

6.1.2局部环境变量

6.2设置用户定义变量

6.2.1 设置局部用户定义变量

6.2.2设置全局环境变量

$ my_variable='zz'
$ export my_variable
$ #此时的变量将可以在子shell中使用

6.3 删除环境变量 uset

unset my_variable #注意不需要$符号

6.4默认的shell环境变量

参见本书的p111表 6-1

6.5设置PATH环境变量

$ PATH=$PATH:/home/ubuntu/Scripts
$ PATH=$PATH:. #直接以.代表当前目录即可

6.2定义系统环境变量(让环境变量持久化)

6.6.1 登录shell

以下五个启动文件

1)/etc/profile

系统上默认的bash shell的主启动文件。系统上的每个用户登录时都会执行。

2) 其余4个$HOME目录下的启动文件

6.6.2 交互式shell进程

如果不是登录系统是启动的,则称为交互式shell。
则不会访问/etc/profile启动文件,只会访问HOME目录中的.bashrc文件。(这就是为什么在配置Jupyter notebook的时候,将相关路径加入~/.bashrc而非上方的3个文件)

6.6.3非交互式shell

6.6.4 环境变量持久化

方法:将变量放入环境变量。

6.7数组变量

$ # 括号中 空格分隔
$ myarr=(one two three)
$ #使用索引来引用对应的值
$ echo $(myarr[1])
$ #查看整个数组 索引值改为星号
$ #使用unset来删除数组的值。

第7章 理解Linux文件权限

7.1 Linux的安全性

7.1.1 /etc/passwd

包含以下内容

7.1.2 /etc/shadow文件

用于管理用户的密码以及密码有效期限的文件

7.1.3 添加新用户 useradd

$ useradd -m test

7.1.4 删除用户 userdel

$ userdel -r test

7.1.4 用户修改

1. usermod

2. passwd和chpasswd
passwd:更改单个用户密码

$ passwd test
$ #会让重复输入两次密码以更改该用户密码

chpasswd:使用标准文件批量更改用户密码
文件每行为 userid:passwd
3. chsh, chfn和change

7.2使用Linux组

7.2.1 /cat/group文件

当一个用户在/etc/passwd文件中指定某个组为默认组时,用户账户不会作为该组成员再出现在/etc/group文件中。
当一个用户同时是多个组中的成员时,在/etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

7.2.2 创建新组

groupadd 创建无用户新组

$ groupadd groupname

usermod 往新组添加用户

$ user -G/g shared test

7.2.3修改组 groupmod

$ groupmod -n new_name shared

7.3 理解文件权限

7.3.1使用文件权限符

ls -l 展示的第一个字段就是描述文件和目录权限的编码。
第一个字符描述了类型

7.3.2 默认文件权限

umask 查看新建文件的默认权限。
umask 返回4位数字。第一位为黏着位
后3位分别代表3个属的文件权限



但注意umask是返回的掩码,新建文件的默认权限实际上是使用全权限值(文件666目录777)减去umask值(8进制的计算)。比如若umask 为026,那么文件的默认权限为640(rw-r-----)。

7.4 改变安全性设置

7.4.1改变权限:chmod

1)选项option

2)八进制模式
chmod 760 file
3)符号模式
[ugoa][+-=][rwxXstugo]
3各参数分别表示

$ chmod o+r file #对所有三个属 增加 r(读取权限)
$ chmod g-x file #对属组用户移除执行权限

7.4.2 改变所属关系

1) chown 改变文件属主
chown options owner[.group] file

$ chown dan newfile #改变文件属主
$ chown dan.shared newfile #改变文件的属主(dan)和属组(shared)
$ chown .shared new file #只改变文件的默认属组
$ chown test. newfile #如果Linux采用和用户登录名匹配的组名,在属主后加.,可以同时改变属主和属组

第9章 安装软件程序

9.2 基于Debian的系统

用aptitude管理软件包

aptitude

aptitude仓库

清单地址:/etc/apt/sources.list

第10章 使用编辑器

第11章 构建基本脚本

11.2创建shell脚本文件

基本脚本实例

#!/bin/bash
date
who
$ chmod u+x file_name

11.3显示消息:echo

$ echo "who is running this:"
$ who

11.4使用变量

11.4.1使用环境变量

11.4.2用户变量

var1=10
var2=testing
var3="more params"

11.4.3 命令替换

将b命令的输出赋值给b变量。

$testing=`date`
$testing=${date}

11.5 重定向输入和输出

11.5.1 输出重定向

$ date > receive_file
$ who >> receive_file

11.5.2 输入重定向

将文件的内容重定向到命令。

$ wc < test6
    2   11  6
# wc 直接接文件名,将会多返回一个字符串--文件名
$wc test6
    2   11  6   test6
$ wc << EOF
>wuliking
>jung un
>EOF
2 2 16

11.6 管道

$ cat file_name|sort|more

11.7 执行数学运算

11.7.1 expr命令

$ expr 1 + 5
    6
$ expr 1 * 4
    expr: syntax error
$ expr 1 \* 4
    4

11.7.2 方括号

$ var1=$[1 + 5]
$ echo $var1
6
# 不赋值或不是用echo命令,直接写方括号表达式将报错
$ $[1 + 2]
3: command not found
# 因为算式的结果直接输入,将3作为命令解释

11.7.3 浮点解决方案

使用bash内建的bc计算器:bc
基本用法:shell下使用bc命令行进入bash计算器

$ bc #进入bc计算器
$ bc -q #进入bc计算器,且不显示普通进入时展示的bc欢迎信息
1+2
3# 进入后shell输入后,shell输入符消失,可以进行运算输入输出
variable=$echo "scale=4; 3.44/5" | bc)
echo $var1

./test
.6880

$ cat test12 
#!/bin/bash 
var1=10.46 
var2=43.67 
var3=33.2 
var4=71 
var5=$(bc << EOF 
scale = 4 
a1 = ( $var1 * $var2) 
b1 = ($var3 * $var4)
$ #这一串输入的最终输出是a1 + b1
a1 + b1 
EOF
) 
echo The anwser is $var5

11.8 退出脚本

11.8.1 查看退出状态码

11.8.2 exit命令:指定退出码

第12章 使用结构化命令

12.1 使用If-then语句

if command
then commands
fi

12.2 if-then-else 语句

if command
then 
    commands
else
    commands
fi

12.3嵌套if:elif

12.4 test命令

12.4.1 数值比较

12.4.2 字符串比较

12.4.3 文件比较

![0b22ac682d375b9f946b6691110d334a.png](en-resource://database/16725:0)

12.5 复合条件

12.6 if-then的高级特性

12.6.1使用双括号:数学表达式

((expression))


除了表中的高级表达式外,也可以使用上方的大于小于等基础比较符号,且不需要使用反转义符。

12.6.2 使用方括号:高级字符串表达式

[[expression]]
可以使用匹配模式

$ if [[ $USER == r* ]] # 如果用户名是r开头

12.7 case命令


case variable in 
pattern1 | pattern2) commands1;; 
pattern3) commands2;; 
*) # 在上方列出的模式外的所有情况,执行默认指令 
    default commands;; 
esac

第13章 更多的结构化命令

13.1 for命令

基本格式

for var in list
do
    commands
done

13.1.1读取列表中的值

for test in hunan hubei shanxi

13.1.3 从变量读取列表

list="hunan hubei shanxi"
# 在已有字符串变量后新增字符串的方法
list=$list" henan"

for state in $list
do 
    echo "Have you ever visited $state"
done

13.1.4 从命令中读取值

file="states"
# cat获取文件states中的内容,再使用for进行遍历
for state in $(cat  $file)
do
    echo "Visiting $state
done

13.1.5 更改字符分隔符

13.1.6 用通配符读取目录

for file in CHAP13/* #file遍历全部文件和文件夹
可以在一个for语句,连续遍历多个文件夹,以空格分隔即可
for file in CHAP13/* CHAP14/*

13.2 C语言风格的for命令

基本格式
for (( variable assignment ; condition ; iteration process))

# 并不需要使用美元符来引用变量
for (( a = 1 ; a < 10 ; a++))
do
    echo "The next number is $i"
done

13.2.2 使用多个变量

# 同时迭代a和b
for (( a = 1, b = 10; a <= 10; a++, b-- ))
do
    echo "$a - $b"
done

13.3 while命令

13.3.1 基本格式

while command
do
    commands
 done

13.3.2 使用多个测试命令

var1 = 10
while echo $var1
# 每个测试命令为单独一行
    [ $var1 -ge 0]
do
    echo "loop is not ended"
    var1=$[ $var1 - 1]
done

13.4 until命令

格式,多个命令测试与while一致;跳出循环的方式与while相反

13.5嵌套循环

(与其他语言一样) while, for, until都是可以互相嵌套的。

13.6 循环处理文件数据

使用两个for嵌套循环,每层分别指定不同的IFS,来遍历/etc/paswd的每行,每个冒号分隔符的内容。

13.7 控制循环

13.7.1 break命令

1.一层循环时,跳出循环
2.多层循环时,break:跳出最内层循环 break n 由内往外在停止n层的循环

13.7.2 continue循环

与break终止一层循环不同,continue只会提前终止某次循环(在这次循环中,不执行continue后的命令)
continue n 可以指定往外跳多少层,继续命令。

13.8 处理循环的输出

在done命令 加一个输出命令实现for循环内的所有输出到屏幕的内容输出到文件。
也可以像管道一样,将整个循环作为管道中的一节(一个命令)。

第14章 处理用户输入

$0 程序名

$ name=${basename $0}
$ if [ -n "$1" ]
$   ...
$fi

14.2特殊参数变量

$ #使用叹号引用
$ echo the last parameter was ${!#}
$ #使用参数赋值方法引用
$ params=$#
$ echo the last parameter was $params

14.2.2 获取所有参数

14.3 移动变量

shift :所有参数往左移动一个位置,第一个被删除。理解成python的list pop(0)

14.4 处理选项

第X章 零散

cron 周期性调度
crontab -l

上一篇 下一篇

猜你喜欢

热点阅读