Linux学习笔记(七)——Shell编程

1 shell

弱类型、解释型语言。解释器:bash

2 变量

bash变量类型
1. 环境变量
2. 本地变量(局部变量):只属于某一个bash的变量;
3. 位置变量
4. 特殊变量(系统变量):bash内置的用来保存某些特殊数据的变量。

2.1 本地变量

  • var_name=值
  • 作用域:整个bash进程

2.2 局部变量

  • local var_name=值
  • 作用域:当前代码段

2.3 环境变量

  • export 名字=值
  • 作用域:当前shell和其他shell

2.4 位置变量

用于脚本执行的参数,$1表示第一个参数,以此类推

2.5 特殊变量

  • $?,上一个命令的执行状态返回值
    这里写图片描述
一、程序有2类返回值
(1)执行结果
(2)执行状态,$?,0:表示正确;1-255:错误
二、输出重定向:
(1)> 覆盖重定向
(2)>>追加重定向
(32>错误覆盖重定向
(42>>错误追加重定向
(5)&>全部重定向
  • $#,传递到脚本的参数个数
  • $*,传递到脚本的参数,与位置变量不同,此选项参数可超过9个
  • $$,脚本运行时当前进程的ID号,常用作临时变量的后缀,如haison.$$;
  • $!,后台运行的(&)最后一个进程的ID号
  • $@,与¥#相同,使用时加引号,并在引号中返回参数个数
  • $-,上一个命令的最后一个参数
  • $?,最后命令的退出状态,0表示没有错误;

2.6 查看shell中的变量

set 命令

2.6.1 查看shell中的环境变量

  • printenv
  • env
  • export

2.7 引用变量

${变量名},一般可以省略{}
这里写图片描述

2.8 引号

  • 单引号:强引用,不作变量替换
  • 双引号:弱引用,做变量替换
  • 反引号:``命令替换
    这里写图片描述
    这里写图片描述

3 脚本

命令的堆砌。
脚本可以有后缀(.sh),可以省略

3.1 练习1

  • 第一行#!/bin/bash,魔术,类似声明;
  • 这里 $1是位置变量

这里写图片描述
这里写图片描述
添加执行权限:chmod u+x test1.sh
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
脚本的另一种执行方式
这里写图片描述

3.2 条件判断

3.2.1 条件表达式

  1. [expression]
  2. test expression

3.2.2 整数比较

  • -eq,比如:[$A -eq $B]
  • -ne,-gt,-lt,-ge,-le

3.2.3 命令的逻辑关系

在linux中命令执行状态:0为真,其他为假

3.2.4 与或非

  • 逻辑与 &&,第一个条件为假,第二个不用再判断。
  • 逻辑或 ||
  • 逻辑非 !

3.3 练习2

这里写图片描述
这里写图片描述
这里写图片描述

3.4 条件判断,控制结构

if 条件 ;then
 语句
elif 条件;then
 语句
else 
 语句
fi
  • -a,逻辑与,并且,if [$# -gt 1 -a $# -lt 3 -o $# -eq 2];then
  • -o,或者

3.5 练习3

如果/etc/inittab 文件的行数大于50,显示文件很大
这里写图片描述
这里写图片描述

3.6 检查 脚本

  • bash -n shell文件,检查文件是否有语法错误
  • bash -x shell文件,debug执行文件

3.7 Shell中如何算术运算

  • let 算术运算符表达式,let C=$A+$B
  • $[算术表达式]C=$[$A+$B]
  • $((算术表达式))C=$(($A+$B))
  • expr 算术表达式,注意:表达式中各操作数及运算符之间要有空格,而且要使用命令引用。

3.8 练习4

给定一个用户,获取其密码警告期限,然后判断用户密码使用期限是否已经小于警告期限,如果小于,则显示“WARN”,否则显示密码还有多少天到期。
这里写图片描述

4 文件测试

  • e FILE,测试文件是否存在
  • -f FILE,测试文件是否为普通文件
  • -d FILE,测试文件是否为目录
  • -r,权限
  • -w
  • -x

4.1 特殊变量

  • $#
  • $@

4.2 字符串测试

  • == ,等号两边需要空格
  • !=
  • -n string,判断字符串是否为空
  • -s string,判断字符串是否不空

4.3 循环

for 变量 in 列表 ;do
  语句
 done

4.4 如何生成列表

  1. {1..100}
  2. seq [起始数] [跨度数] 结束数
  3. ls /etc 文件列表
  4. 练习,依次向/etc/passwd 中每个用户问好:hello 用户名,并显示用户名的shell
    这里写图片描述
    这里写图片描述
  5. 计算100以内所有能被3整除的整数的和
    这里写图片描述
    这里写图片描述
  6. 传给脚本一个参数:目录,输出该目录中文件最大的文件名和文件大小
    这里写图片描述
    这里写图片描述

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/80828668