linux shell 目录
目录
- linux shell 目录
- 类型
- shell主要内容
- 1. 开头(第一行)和环境说明
- 2. 注释 使用#号
- 3. 通配符
- 4. 局部变量和全局变量
- 5. 提取变量 $name 变量修饰符
- 6. 显示输出 echo printf
- 7. 读取用户输入 read
- 8. 脚本位置参数 $* shift
- 9. 重定向符号
- 10. 数组使用
- 11. 命令替换型变量赋值
- 12. 算数运算
- 13. 运算符 大小 等于 逻辑
- 14. 条件语句 if case
- 15. 循环语句 for while until
- 16. 文件测试(和if一起使用)
- 17. 函数
- 18. 调试shell脚本
- 19. 三剑客和linux正则表达式
- 20. linux 正则表达式参考
- 21. vim编辑器使用
类型
unix支持三大主流shell
- Bourne shell(AT&T开发 shell),标准的unix shell,以$提示
- C shell(Berkeley分校 shell),以%提示
- Korn shell (Bourne shell的一个扩展集,AT&T的David Korn开发)
linux支持的shell(可有四种)
- GNU的shell,默认GNU bash(Bourne Again shell)
- TC shell 是unix C shell的一个兼容分支(模仿TENEX名字)
- Z shell 是linux shell的一种,综合体:结合了bash,tcsh,ksh
- 还有一种pdksh(Public Domain Korn shell),是需要向AT&T付费
查看支持/etc/shell
POSXI标准,操作系统标准,其中规范了shell和工具软件标准
执行解析顺序
- 别名
- 关键字
- 函数
- 内置命令
- 可执行程序(派生子shell执行)
命令的退出时子shell完成,exit返回给父shell的状态
部分相关命令
查询进程 ps pstree kill
ps -aux
pstree
kill 2564
查询用户身份 id
为文件创建掩码 umask
为文件创建掩码,可以使目录和文件默认权限减去umask值
chmod 修改文件和目录访问权限
chown 改变文件和目录的所有者
chown 用户:组 filetest 例如 chown root:root filetest.txt
env 查看变量
env 显示环境变量(理解为全局)
| 管道
pipe | 管道两边相当于开了两个子shell,同时执行,不过一个要往管道输入东西,一个要从里面读取东西
who | wc 相当于 who > tmpfile;wc tmpfile;rm tmpfile;
shell和信号(进程会反应)
有些输入会形成信号,然后给shell,会致使shell下进程做出下面动作:
- 忽略信号
- 停止进程
- 继续进程
- 进程被程序中定义的函数捕获,进行处理
信号表:
shell主要内容
1. 开头(第一行)和环境说明
#!/bin/bash
#!为幻数
一个进程(shell)的环境包括:变量、打开的文件、当前工作目录、函数、资源限额、信号等。
使用source(.)命令可以使文件的所有设置成为当前shell的一部分。
/etc/profile 系统级初始化文件
找到/etc/profile.d/*文件执行
.bash_profile(三选一执行) 在用户主目录下,执行~/.bashrc,没有找下面
~/.bashrc,env变量被赋值为名称.bashrc,每次bash脚本,或者shell启动,都会对这个文件进行source,包含了下面设置
set -o 打开内置选项
set +o 关闭内置选项
直接set -o 查看所有当前设置
执行/etc/bashrc
.bash_login(三选一执行) 没有找下面
.profile(三选一执行)没有就到此为止
用户自定义的初始化文件
命令默认搜索路径 echo $PATH
hash命令 显示登陆会话的已执行命令完全路径名
命令分组(注意内侧空格)
( ls; pwd; date ) > outfile
后台执行
man sh | lp&
进程控制(作业控制)
[root@192 ~]# jobs -l 显示后台的作业
[1]+ 2998 Stopped vi
jobs %% 最后一个放进后台的
fg %1 拿回前台
kill 2998
历史命令history
别名
alias cp=‘cp -i’
unalias cp 删除别名
2. 注释 使用#号
3. 通配符
有操作含义的字符 ,在shell中不仅仅是看到的字符串
ls f{a,b,stab} 注意里面没有空格
注意此处(){}在执行命令时的区别
()开启子shell
{空格echo aa;cc=cc;} 在本shell中执行
取消了元字符功能
扩展gloabbing功能(和正则有点区别)
对于双引号,单引号处理特殊的元字符,会使其失效,就是普通字符
但是对于双引号不回禁止$变量替换 和 反引号命令替换
/ 转义单个字符,在“” ‘’ 里面也被保护,但是在“” 中碰到特殊元字符会触发保护,可解决双引号$ 和反引号问题
单双互相保护(单双也是特殊字符)
4. 局部变量和全局变量
取消变量 unset
设置变量 declare -a -f -F -i -r -x
设置全局变量
export var=aa
declare -x arr=aa
5. 提取变量 $name 变量修饰符
var2=${var:-word} var有则自己给 if var 为空,则var 为word,var为空;否则var为空,var2为var
var2=${var:+word} var则别人给
var2=${var:=word} var有则自己给 if var 为空,则var 为word,var为空;否则var为word,var2为var
var2=${var:?word} var有则自己给,否则输出word信息
var2=${var:0:4} 0为开始位置,4为长度
var2=${var:0} 0为开始位置
取消变量使用 unset var 没有$符号
${var%模式}鱼尾少不贪 使用上面的通配符匹配
echo ${var:=aaadddccdcc} echo ${var%d??} 注意完整匹配
${var%%模式}
${var#模式}
${var##模式}
/etc/aaa.txt ${var##*/} 可取出basename
效果
${#var} 变量长度
6. 显示输出 echo printf
echo用法
printf 用法
7. 读取用户输入 read
read var1 var2 var3 对于其余的都会给var3
默认给REPLY
8. 脚本位置参数 $* shift
注意,$@ $*
如果是 “$@” 看成分割的”aa” “BB” “cc”,此时for循环三次
如果是 “$*” 看成不分割的”aa BB cc”
9. 重定向符号
shell 启动时继承了3个文件stdin stdout stderr
来自键盘 去向屏幕 去向屏幕
1>
2>
find . -name *.c -print > foundit 2> /dev/null 双向奔赴
&> 或者 >& 一起走向
&1
&2
>>
exec和重定向
exec ls 运行后退出shell,小心
here文档和重定向输入<<
shell调用选项
内置set命令选项
shopt命令和选项
shell内置命令
10. 数组使用
数组参考链接
11. 命令替换型变量赋值
反引号 `命令`
$(命令)
12. 算数运算
求值给变量赋值
$[ exp ]
可不带空格 echo $[1+5*3]
echo /([/)v1+53] echo $[v1+53] 使用变量
$(( exp ))
echo $((1+5*3))
echo /(((/)v1+53)) echo $((v1+53)) 使用变量
declare -i var1 必须先声明,再var1=5+5/5
let 可用于整数运算和数值表达式测试
let “i+=1” ((i+=4))代替let
使用expr(待补充中)
浮点运算
echo “scale=3; 13/2”|bc
使用awk
13. 运算符 大小 等于 逻辑
14. 条件语句 if case
条件结构和流程控制
15. 循环语句 for while until
16. 文件测试(和if一起使用)
17. 函数
18. 调试shell脚本
19. 三剑客和linux正则表达式
三剑客参考链接
linux正则表达式参考链接
20. linux 正则表达式参考
21. vim编辑器使用
参考链接
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/268382.html