加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash语言基础

发布时间:2020-12-15 22:22:39 所属栏目:安全 来源:网络整理
导读:编程语言: 低级:汇编 高级: 编译: 高级语言 - 编译器 - 目标代码 c,c++,java 解释: 高级语言 - 解释器 - 机器代码 shell,perl,python shell 如何执行程序: 过程式、解释执行 运行脚本: 1. 给与执行权限,通过具体的文件路径指定文件执行 2. 直接运行

编程语言:
低级:汇编
高级:
编译: 高级语言 -> 编译器 -> 目标代码
c,c++,java
解释: 高级语言 -> 解释器 -> 机器代码
shell,perl,python
shell 如何执行程序: 过程式、解释执行
运行脚本:
1. 给与执行权限,通过具体的文件路径指定文件执行
2. 直接运行解释器,将脚本作为解释器程序的参数运行

变量:命名的内存空间

bash的变量种类:
    根据变量的生效范围等标准
        本地变量: 生效范围为当前shell进程;对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效
        环境变量: 生效范围为当前shell进程及其子进程
        局部变量: 生效范围为当前shell进程中某代码片段(通常指函数)
        位置变量: $1,$2...来表示,用于让脚本在脚本代码中调用通过命令行传输给它的参数
        特殊变量: $?、$0,$*,[email?protected],$#

变量命名法则:
        1. 不能使用程序中的保留字:if,for
        2. 只能使用数字、字母及下划线,且不能以数字开头
        3. 见名知意

只读变量:
    readly name
    declare -r name

本地变量:
    变量赋值:name='value'
        可以使用引用:
            value: 
                1. 可以是直接字串,name="username"
                2. 变量引用: name="$username"
                3.命令引用: name=`COMMAND`,name=$(COMMAND)
    变量引用:${name},$name
        "": 弱引用,其中的变量引用会被替换为变量值
        '': 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
    显示已定义的所有变量
        set
    销毁变量:unset name

环境变量: 
    变量声明、赋值
        export name=VALUE
        declare -x name=VALUE
    变量引用: $name,${name}
    显示所有的环境变量
        export,env,printenv
    销毁:
        unset name
    bash有很多内建的环境变量: PATH,SHELL,UID,HISTORY,HOME,PWD,OLD,HISTFILE,PS1

位置变量
    在脚本代码中调用通过命令行传递给脚本的参数
        $1,$2,... : 对应调用第1个、第二个等参数
            shift [n]: 剔除某个变量

特殊变量
    $?: 上一条命令的执行结果
    $0:命令本身
    
    $*: 传递给脚本的所有参数
    [email?protected]: 传递给脚本的所有参数
    $#: 传递给脚本的参数的个数

变量作用域:
本地变量:当前shell进程:为了执行脚本会启动专用的shell进程,因此本地变量的作用域是当前shell脚本程序
局部变量:函数的生命周期;函数结束时变量被自动销毁
在函数中定义局部变量的方法:加local关键字
lodal NAME=VALUE

bash中的算术运算
+、-、/、%、*
实现算术运算
1. let var=算术表达式
2. var=$[算术表达式]
3. var=$((算术表达式))
4. var=$(expr arg1 arg2...)
乘法符号有些场景需要转义
bash有内建的随机数生成器:$RANDOM

增强型赋值
    +=,-=,/=,%=

自增、自减
    比如自增: let var++

练习1.写一个脚本
计算/etc/passwd文件中的第10个用户和第20用户的ID之和
#!/bin/bash
userId1=$(head -10 /etc/passwd | tail -1 | cut -d: -f3)
userId2=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)
useridsum=$[$userId1+$userId2]
echo "uid sum is $useridsum"

练习2.写一个脚本
传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
#!/bin/bash
spaceline1=$(grep "^[[:space:]]") $1 | wc -l)
spaceline2=$(grep "^[[:space:]]
") $2 | wc -l)
echo "$[$spaceline1+$spaceline2]"
给出两个目录: /etc/fstab;/etc/grub2.cfg

练习3.统计/etc,/var,/usr目录共有多少个一级子目录和文件 #!/bin/bash fnum1="$(ls /usr | wc -l)"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读