Shell 编程入门

1.1、shell特性

history 历史命令记录,root 用户默认存放文件~/.bash_history

默认存放1000条记录

查看记录数量 echo $HISTSIZE

!! 上条命令

!$上条命令最后一个参数

!955 运行记录中第955条命令

!c 选择最近的一条以c开头的历史命令运行,从下向上查找

tab 补全命令和路径,按两下显示所有可补全的命令

设置别名alias aaa='ls -la'

取消别名unalias aaa

*通配符 ls *.txt (会显示所有以.txt结尾的文件)

只匹配一个字符 ls ?.txt (会显示单个字符名的.txt 文件;如 1.txt)

| 管道符 将结果 赋予下一个命令(cat /etc/passwd|wc -l)

> 重定向(echo "jdsfjf" > 1.txt 会覆盖1.txt 的内容)

>> 追加重定向(不覆盖原有内容直接在原有内容上添加)

<反向重定向(wc -l < 1.txt 把1.txt内容丢给命令处理)

2>错误重定向(ls 111 2> 1.txt 将运行ls 111 提示的报错信息记录到 1.txt)

2>>追加错误重定向 (ls 111 2>> 1.txt 在上次记录错误信息后,追加报错内容)

ctrl+z 暂停 jobs查看暂定的进程数 fg 调到前台运行(+默认恢复的 fg 2 恢复 2的进程)bg 调到后台运行 jobs中显示会有&符号

1.2、shell变量

  • 系统变量:

    env 查看系统环境变量

    echo $HOSTNAME 显示HOSTNAMT 变量的值(查看变量值

    或引用这个变量值需要添加$)

    set 显示系统变量(会显示 系统变量、自定义变量以及额外的变量)

  • 用户自定义变量:

    格式 a=1;b=2

    变量名只能是 字母、数字、下划线,数字不能开头

    注意:

    • 大写、命令、关键字等 字符尽量不要用作变量名(系统变量为大写)
    • 变量内容中有特殊字符,变量内容需要使用单引号(如:b='ls /tmp/' 空格为特殊字符)
    • 变量内容需要使用其他命令运行的结果,可以使用反引号(如 which vim 结果为/usr/bin/vim;myvim=which vimecho $myvim= /usr/bin/vim
    • b="$a"12 (b的值=变量a的值增加12,如:a=1 、echo $b为112;c="$a"b、echo $c为1112)

bash 打开一个子shell exit退出子shell

shell中export a=1 子shell 可以调用a=1 (export 全局变量)

vim /etc/profile (所有的变量需要在所有的shell中生效 需要将这个变量加入这个文件)

unset a(删除变量值,a为自定义的变量名称)

1.3系统和用户的环境变量配置文件

用户、系统环境变量配置文件:

PATH HOME SELL

vim /etv/profile (系统相关的 任何账户都生效)

vim /etc/bashrc (可以设置PS1 值PS1='[u@h w]$ ' W绝对路径 w路径最后一个文件夹名 t 显示时间 如:[u@h w]$ ;设置umask)

vim /etc/profile.d 环境变量定义文件(自动定义pata变量 vim etc/profile.d/path.sh ,新建一个path.sh的定义文件)

source /etc/profile (使定义文件生效)
【root用户命令输入位置是 # 符号;普通用户是 $ 符号;所有环境变量不建议直接修改配置文件,建议 /etc/profile.d 文件夹下添加.sh文件】

  • 家目录下的 部分文件

    .bash_history 保存的命令历史

    .bash_logout 用户退出时执行的命令,比如退出时删除历史命令,可以写入这个文件中

    .bash_profile 用户自己的环境变量配置,只对当前用户生效

    .bashrc 用户别名配置文件,当前用户生效

1.4、shell中特殊符号

特殊符号:

* 通配符(通配多位 ?只能通配一位字符)
# 配置文件、shell中 #这一行不运行,不生效;可以作为注释使用
 脱异符号 (如:ls #1.txt 只运行了ls 未识别到#1.txt  ls #1.txt将#1.txt作为文件名运行)
| 管道符 把一条命令的结果 丢给后面一条命令
$ 变量前添加这个符号,表示在使用这个变量
!$ 最后的意思(如:ls !$ 会调用最后输入ls 的参数命令)vim 中!$ 指最后一行,最后一个字符、行尾deng
; 运行在命令的中间(如:`ls 1.txt;ls 3.txt`同时运行两个命令)
~ 用户的家目录(ls ~ 相当与ls root)
& 把一个命令放到后台运行(如:sleep 2233 &  在后台运行sleep这个命令)
&& 
>  重定向 
>> 追加重定向
2> 错误重定向
2>>错误重定向
<  错误追加重定向 反重定向(将右侧的文档内容 重定向给左侧的命令)
[] 正则表达式中表示范围;命令中 ls [12].txt == ls 1.txt 2.txt ;ls [1-3].txt== ls 1.txt 2.txt 3.txt

1.5、cut命令

cut 将文件分段

cat /etc/passwd

-d: 以:号为分隔符;

-f 3 显示第三段,显示多段的-f 3,4-f 3,6,5 显示 3段 然后6段 然后显示5段;如:cut -d: -f 3 /etc/passwd

-c 显示第几个字符 如:cut -c 10 /etc/passwd 显示第10个字符 cut -c 1-10 /etc/passwd 显示1到10 的字符

1.6、sort命令

sort 排序使用 (默认以ASCII码 排序)

格式:sort /etc/passwd

-t 分隔符

-k 选择第几段(sort -t: -k3 /etc/passwd 以:为分隔符 按照第3段内容排序;范围值 3,4 不是cut的- 如:sort -t: -k3,5 显示3到5段的内容 )

-n 以数字排序 (如:sort -t: -k3 -n /etc/passwd)

-r 反序排序,最小的在下面

-u 排序去重复内容

-un 字母开头的会识别成重复内容,如skj1 a weotj 都会认为是重复内容,只显示数字内容

1.7、wc命令

-l 显示行数 (如:wc -l.txt)

-w 统计文本中word(单词)数量

-m 统计文本字符数(换行符也会被统计)

1.8、uniq和tee命令

uniq 去重复
-c 统计重复数量(格式:uniq -c 1.txt)
重复内容不在邻近行,无法去重复(sorf 2.txt |uniq -c 先排序,然后在去重复)
tee 重定向 并显示(格式:echo "1234" |tee 1.txt)

1.9、tr和split命令

  • tr替换字符

    ls *.txt |tr 'a-z' 'A-Z' 将所有的.txt文件名中的小写替换成大

  • split 切割文件

    split -p 50m 1.txt 按大小分隔(单位为B 不用写单位)

    split -l 100 1.txt 按行分隔

    自定义分隔后文件名: split -p 20 1.txt new_ (new_ 为分隔后文件 开头名称)

2.0、shell中连接符(并且、和、或者)

并且、或者(&& ||)

&& 左边命令执行成功后,才会运行右边的命令
|| 左边命令执行不成功,才会执行右边的命令
; 左边命令执行成功与否,都会执行右边的命令

原文地址:https://www.cnblogs.com/cy-8593/p/9512456.html