shell脚本的组成部分

  • shebang
  • 各种命令组合

编程变量种类

  • 本地变量: 仅仅在当前的shell生效
  • 环境变量: 在当前和子shell生效
  • 局部变量: shell进程某代码片段
  • 位置变量: $1,$2来表示,用与获取脚本接受的参数
  • 特殊变量: 一些特殊变量

一、编程环境

特殊变量如下

  • $?:上一个命令的执行返回码
  • $#:参数个数
  • $*:参数
  • $0:命令本身
  • $@:所有参数

本地变量: name=’value’

环境变量:export name=value,declare -x name=value

查看环境变量: env,export,printenv变量

bash的配置文件

针对用户的别名: “~/.bashrc”
针对系统的别名:”/etc/bashrc”
 
用户环境变量 bash_profile
系统环境变量:/etc/profile

profile:用于定义环境变量和脚本

bashrc:用于定义命令别名和本地变量

按照生效范围,存在两类:
    全局配置文件:
        /etc/profile
        /etc/profile.d/*.sh
        /etc/bashrc
    个人配置文件
        ~/.bashrc
        ~/.bash_profile

按照功能划分,存在两类:
    profile类:为交互式登录shell提供配置
        全局:/etc/profile,/etc/profile.d/*.sh
        个人:~/.bash_profile
    bash类:为非交互式登录shell提供配置
        全局:/etc/bashrc
        个人:~/.bashrcr

1.算术运算:bash会对数字进行隐形的类型转换

   运算操作符:+,-,*,/,%,
let a=expr
$[expr]
$((expr))
expr a1 op a2
注意:乘法符号有些场景需要转义:"\"

2.条件测试:判断某需求是否满足,需要有测试机制来实现;

  • test expr
  • [ expr ]
  • [[ expr ]]

3.数值测试

  • -gt   是否大于
  • -lt    是否小于
  • -eq  是否等于
  • -ge   是否大于等于
  • -le   是否小于等于
  • -ne   是否不等于

4.字符串测试

  • ==
  • >
  • <
  • !=
  • =~   左侧的字符串是否能被右侧的pattern所匹配
  • -z  “String”  测试字符串是否为空,空为真,不空则为假
  • -n  "String"  测试字符串是否不空,不空为真,空则为假

5、文件测试:测试文件的属性信息,如存在、类别、权限

1)存在性测试

  • -a  file
  • -e file:  文件存在性测试,存在为真,否则为假

2).存在性及类别测试

[ -b "filevar" ]  是否存在且为块设备文件

[ -c  "filevar" ]   是否存在且为字符设备文件

[ -d  "filevar" ]   是否存在且为目录

[ -f  "filevar" ]    是否存在且为普通文件

  • -S file :存在且为socket
  • -p  file   是否存在且为管道文件
  • -h 或者 -L   file 是否存在且符号链接文件

3).存在性及文件权限测试

  • -r file   是否存在且可读
  • -w file  是否存在且可写
  • -x file   是否存在且可执行

4).存在性及文件特殊权限测试

  • -g file  是否存在且拥有sgid权限
  • -u file  是否存在且拥有suid权限
  • -k file  是否存在且拥有sticky权限

5).存在性及文件大小测试

  • -s file 是否存在且非空

6).存在性及文件是否打开

  • -t fd :表示文件描述符是否已经打开且与某个终端先关
  • -N file :文件自上次被读取之后是否被修改过
  • -O file:当前有效用户是否是文件属主
  • -G file:当前有效用户是否是文件属组

7).双目测试

  • file1 -ef file2:  file1与file2是否指向同一个设备上相同inode
  • file1 -nt file2 : file1的mtime新于file2则为真,否则为假
  • file1 -ot file2: file1的mtime旧于file2则为真,否则为假

6.组合测试条件

在shell编程当中支持一些逻辑运算:true(1),false(2)

echo $? : 上条命令执行返回状态码,成功返回0,失败返回非0

与运算:

 &&:两个都为真则为真

  真 && 真 = 真 or 1 && 1 = 1

  真 && 假 = 假

  假 && 真 = 假

假 && 假 = 假

或运算:|| 表示 有一个为真则为真

非运算:

真,非真

假,非假

Linux bash基础特性二的更多相关文章

  1. Linux bash基础特性一

    命令别名 alias cdnet=”cd /etc/sysconfig/network-scripts” 针对用户的别名: “~/.bashrc” 针对系统的别名:”/etc/bashrc” 重读配置 ...

  2. linux bash基础特性

    使用history命令,取得命令历史,当bash进程结束后,会把命令历史存放到文件中,下次开机还能看到命令历史. 定制history:通过设置环境变量,来定制history 环境变量$HISTSIZE ...

  3. linux bash基本特性

    一.bash 基础特性 (1)命令历史的功能 history: 环境变量 HISTSIZE:命令历史记录的条数 HISTFILE: ~/.bash_history 每个用户都有自己独立的命令历史文件 ...

  4. linux文件系统及bash基础特性

    linux文件系统 一.根文件系统 linux被识别的第一个被称为根之间关联的文件系统叫做根文件系统(rootfs),其他分区要想被读到,需要挂载到根目录的某个挂载点(根的子目录)上.根文件系统至关重 ...

  5. Bash 基础特性

    命令别名  alias 显示当前shell中定义的所有别名  alias 别名='原始命令'  unalias 别名 取消定义的别名在命令前加\使用命令本身,而不是别名(或者使用绝对路径执行命令使用命 ...

  6. linux系统基础(二)

    磁盘管理(一) Linux设备认识 /dev/cdrom /dev/sr0 /dev/mouse /dev/sda /dev/hda IDE硬盘(支持4块):hd(a-d) [非IDE硬盘]SCSI硬 ...

  7. bash基础特性3(shell编程)

    Linux上文本处理三剑客: grep:文本过滤工具 sed:stream editor,文本编辑工具 awk:文本报告生成器 grep -v:显示不能够被pattern匹配到的行 -i:忽略字符大小 ...

  8. bash基础特性2

    命令别名(alias) ()alias 显示当前shell进程所有可用的命令别名: ()alias NAME='VALUE' 定义别名NAME,相当于执行命令value ()unlias 撤销别名 注 ...

  9. bash基础特性1

    shell俗称壳(用来区别于内核),是指“提供使用者使用界面”的软件,就是一个命令行解释器. BASH是SHELL的一种,是大多数LINUX发行版默认的SHELL,除BASH SHELL外还有C SH ...

随机推荐

  1. Python读写文件的几种方式

    一.pandas pandas模块是数据分析的大杀器,它使得对于文件相关的操作变得简单. 看一下它的简单使用 import pandas as pd # 读取 df = pd.read_csv('al ...

  2. windows上编译zlib-1.2.8

    MSVC编译 使用VS(x86)命令行工具进入到zlib根目录,执行 nmake -f win32/Makefile.msc ,在根目录下生成:zlib.lib(静态库)  zdll.lib(动态库的 ...

  3. django - 总结

    0.html-socket import socket def handle_request(client): request_data = client.recv(1024) print(" ...

  4. KNN和Kmeans聚类有什么不同?

    这两种算法之间的根本区别是,Kmeans本质上是无监督学习而KNN是监督学习.Kmeans是聚类算法,KNN是分类(或回归)算法. Kmeans算法把一个数据集分割成簇,使得形成的簇是同构的,每个簇里 ...

  5. Contest2158 - 2019-3-14 高一noip基础知识点 测试3 题解版

    传送门 预计得分:0 实际得分:90 还行 T1 数学卡精 二分double卡精 反正就是卡精 怎么办?卡回去!! 将double*=1e4,变成一个long long 注意四舍五入的奇技淫巧 代码 ...

  6. Educational Codeforces Round 52 (Rated for Div. 2)

    题目链接 A. Vasya and Chocolate 题意 已知钱,价格,赠送规则求最多获得巧克力数 思路常规算即可 代码 #include <bits/stdc++.h> #defin ...

  7. 2.解决虚拟机中centos联网的问题

    首先:打开虚拟机的编辑菜单,选择“虚拟机网络编辑器” 虚拟机网络编辑器 在虚拟机网络编辑器中选择还原默认设置 接下来开启CentOS7虚拟机 在这里需要注意的是必需以管理员身份来进行设置,所以要用管理 ...

  8. radio日志sim卡信号状态分析

    logcat -b radio日志 // 接着将slot 0主卡置为false,将slot 1设置为true 08-09 11:24:40.335 2565 3243 D RILJ : [4820]& ...

  9. 电子医疗设备创新研发应该用i.MX6Q开发板吗?为医疗设备提供解决方案

    伴随医疗信息化.移动化.智能化的不断发展,居民对自身健康的关注度持续加强,全球医疗电子产业近年来持续保持快速增长态势.同时,源于庞大的人口基数以及迅速增长的老龄化人口带来持续增长的医疗服务需求,加之全 ...

  10. Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值

    参考链接:https://blog.csdn.net/lander_xiong/article/details/79018737