导图社区 14 shell编程基础
shell编程基础,适用于刚入门的小伙伴加深记忆。
编辑于2021-03-02 16:41:58shell编程基础
简介
字符 —二进制—内核—解析器—人
/bin/bash默认使用
脚本执行方式
echo 选项 输出内容
-e 支持反斜杠控制的字符转换
-e 支持的特殊符号列表
\n 换行
\t制表符
-n 取消输出后行尾的换行符号
echo \e[m显示颜色或特殊显示
创建一个合格脚本 .sh
执行一个合格脚本
添加x执行权限(相对或绝对路径)
用bash命令,调用脚本文件
bash基本功能
历史命令查看 history
-e 清空历史命令
-w 把缓存中的历史命令保存到历史命令配置文件 .bash_history
历史命令调用
!n 重复使用第n条历史命令
!! 重复执行上一条命令
!字符 重复执行最近一条以这个字符开头的命令
tab补齐
命令别名 alias 别名=‘ 原命令 选项 ’
alias 直接查看
别名相关配置文件
单个用户生效:~/.bashrc
所有用户生效:/etc/bashrc
不同类型的命令执行的顺序
绝对路径或相对经【不用别名
别名命令
bash内置命令 type help列出的
预设好的目录里找
bash常用快捷键
输入输出重定向
bash的标准输入输出
bash的输出重定向
输入重定向
wc 选项 文件名
-l 统计行数
-w 统计单词数
-c 统计字符数
多命令顺序执行
;
&&
||
grep 选项 “关键词 ” 文件名
-An 列出符合条件的行,并连续列出后续n行
-Bn 列出符合条件的行,并连续列出前面n行
-c 统计包含字符串的行数
-i 忽略大小写 find 是在系统中查找符合条件的文件名,默认是完全匹配,如果需要模糊查找使用通配符。 grep 是在文件中查找符合条件的字符串,是包含匹配,如果需要精确查询,需要使用正则表达式
-n 输出行号
-v 取反
--color=auto 搜索出关键词高亮显示
通配符
? 任意一个字符
* 0个或任意多个
[] 括号中任意一个
[-] 范围内的一个字符
[^] 逻辑非
管道符
| 执行完的结果整体送入到命令2处理【文件】
|xargs 执行完的结果一个一个的向后传递【文件里的内容】
bash 其他特殊符号
单引号:取消了所有符号的特殊功能
双引号:绝大多数取消了特殊功能 【$ \保留】
反引号:引用系统命令,可以保存结果到某变量中
$() :引用系统命令,遵循shell的语法格式,自动高亮显示
小括号:是独立的另一个bash解析器中执行的,等同于两个不同的用户【临时命令】
大括号:相当于是在当前环境中执行的,与不加没有区别
左括号有一个空格
最后一个命令结尾要有分号
注释符号: // ; /* 内容 /*[最后这个开发常用]
转义符号: 取消命令的别名,使用命令的本意 2)取消特殊符号的功能,使其变成普通的字符
调用变量的值: ${变量名}
test #进行条件判断
条件判断式: test #进行条件判断 整数数值大小判断: 等于:-eq 不等于:-ne 大于:-gt 小于:-lt 大于等于:-ge 小于等于:-le 格式: test 数值1 判断符号 数值2 a=100 b=200 test "$a" -eq "$b" && echo yes || echo no
Bash变量和运算符
变量的规范
不能以数字开头
数值型的要声明
进行变量赋值时,等号左右不能有空格
变量的值如果有空格,需要使用单引号或双引号【test=“hello world”】
变量叠加时,必须在不影响原值的情况下
变量名=“${变量名} 新增值”
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
$()和``调用结果的命令,保存到变量中,用来进行判断
变量的分类
自定义变量
环境变量 :根据用户身份和登录后的环境,同一个变量保存不同的值
位置参数变量:脚本外向脚本内传值,用户输入
预定义变量 :来自系统
使用方法
变量调用:echo $变量名
变量查看
set:查看所有自定义变量和环境变量
find 是在系统中查找符合条件的文件名,默认是完全匹配,如果需要模糊查找使用通配符。 grep 是在文件中查找符合条件的字符串,是包含匹配,如果需要精确查询,需要使用正则表达式
shell编程基础
bash变量和运算符
自定义变量
空格、名称、引号
变量调用:set 列出所有生效了的自定义变量和环境变量
set -u :调用没有声明的变量时会报错
set -x :命令执行前,会先把完整命令输出一次
变量删除:unset 变量名
环境变量
设置:export AGE=18 #声明的只是环境变量
环境变量查询 env
系统默认的环境变量
PATH:系统命令存放路径
变量值用:分割的路径
让脚本向执行命令一样简单 【export PATH=”$PATH:/bash”】
脚本放入PATH对应的目录内
修改PATH变量的值,将我们存放脚本的目录叠加到PATH变量中
配置文件
单用户生效:~/.bash_profile
所有用户生效:/etc/profile
刷新配置文件:source 配置文件
PS1变量:命令提示符设置
可用选项
定义PS1变量时需要注意单引号,否则不生效
LANG :系统语系变量
C6的系统语言环境:/etc/sysconfig/i18n
C7系统语言环境:/etc/locate.conf
位置参数变量
通过位置进行变量赋值和取值
Sn :
S0 :命令本身
S1-9 参数 S{10} 如果没有大括号,会取$1的值
S* :命令行中的所有参数; 把所有参数看成一个整体
S@ :也代表命令行中的所有参数,不过S@把每个参数区分对待
$# :这个变量代表命令行中所有参数的个数
运算工具:$((运算式)) 【必须是整数型】
echo $(($1$2$3))
echo "$1$2$3=$(($1$2$3))"
echo "$(($1))"
预定义变量
$? 判断
$$ 当前进程的进程号PID
$! 后台运行的最后一个的进程号PID
ps aux 查看系统进程
read 选项 变量名
-p 脚本向人要一个变量的值
-t 秒数
-n 满足字符数自动Enter
-s 隐藏输入信息
read 变量名的定义
可以指定,也可以默认
如果只提供了一个变量名,则整个输入全部赋予该变量
最后一个变量取得所有值
shell的运算符【声明不同变量的工具】
变量名[下标]=值 定义变量
echo "${teacher[@]}" 调用所有值
echo "${teacher[2]}" 单独调用第三个值
declare 【-+】 选项 变量
-a 声明成数组型
-i 声明成整数型 declare -i a=100
-r 声明成只读 declare -r test=20w[无法修改了,+r 取消吧]
-x 声明成环境变量 declare -x aad="shan chuan" env 查看
-p 显示指定变量的类型和内容或值 验证变量的类型 列出变量设置时使用的参数
expr 声明进行数值运算【注意运算符两边的空格】
let 声明进行数值运算
let n++
let n=n+1
let n+=1
原值的基础上 +1 【也可以指定数值】
$(()运算式) echo $(($xx+$yy)) 【仅限于整数】
$[运算式] echo $[$xx+$yy]
shell常用运算符
优先级:1正负2乘除取余3加减4自增自减 ...
取模运算:1求整数商 c=a/b 2 计算模或者余数 :r=a-c*b
逻辑与 : 有假则假,全真则真
环境变量的配置
source 刷新修改过的配置文件使其生效
/etc/profile
USER变量:根据登录的用户,给这个变量赋值(就是让USER变量的值保存当前用户名)。 LOGNAME变量:根据USER变量的值,给这个变量赋值。 MAIL变量:根据登录的用户,定义用户的邮箱为/var/spool/mail/用户名。 PATH变量:根据登录用户的身份,决定PATH变量是否包含专属目录(/root/sh)。 HOSTNAME变量:更改主机名,给这个变量赋值。 HISTSIZE变量:定义历史命令的保存条数。
~/.bash_prifile
调用了~/.bashrc文件。 【目录叠加】在PATH变量后面加入了“:$HOME/bin”这个目录。那也就是说,如果我们在自己的家目录中建立bin目录,然后把自己的脚本放入“~/bin”目录,就可以直接执行脚本,而不用通过目录执行了
~/.bashrc
定义默认别名,所以我们把自己定义的别名也放入了这个文件。 调用/etc/bashrc
/etc/bashrc
PS1变量:也就是用户的提示符,如果我们想要永久修改提示符,就要在这个文件中修改 umask:定义umask默认权限。这个文件中定义的umask是针对“没有登录过程(也就是不需要输入用户名和密码时,比如从一个终端切换到另一个终端,或进入子Shell)”时生效的。如果是“有用户登录过程”,则是/etc/profile文件中的umask生效。 PATH变量:会给PATH变量追加值【单独的环境变量,优先生效】,当然也是在“没有登录过程”时才生效。 调用/etc/profile.d/*.sh文件
注销专用环境变量配置文件:~/.bash_logout
shell登录信息:/etc/issue 登录本地终端时的提示信息 /etc/motd 显示欢迎信息的远程和本地都能显示
bash快捷键: 查看所有 stty -a 修改关键词(stty 关键词 快捷键):stty intr ^p