shell 编程基础(1)

目录

一、shell概述

1、什么是shell

2、shell的分类

二、shell的执行方式

1、echo 命令

2、shell脚本的执行方法

三、Bash的基本功能

1、历史命令

2、命令与文件的补全

4、Bash常用快捷键

5、输入输出重定向

6、多命令顺序执行

7、管道符

8、通配符

9、Bash中其他特殊符号


一、shell概述

1、什么是shell

2、shell的分类

二、shell的执行方式

1、echo 命令

echo [选项]  [输出内容]

选项:

        -e :        支持方反斜线控制的字符转换

        -n:            取消输出后汉行末执行的换行符(就是内容输出后不换行)

例:

[root@itpuxhsdb52 ~]# echo -n "abccc"
abccc[root@itpuxhsdb52 ~]# 
控制字符作用
\\删除\ 本身                
\a输出警告音
\b退格键
\c取消行末输出的换行符。和“-c”选项一致
\eESCAPE键
\f换页符
\n换行符
\r回车键
\t        制表符,也就是TAB键
\v垂直制表符
\0nnn按照八进制ASCII码表输出字符。其中0是数字0 ,nnn是三位8进制数
\xhh按照16进制ASCII码表输出字符。其中hh是两位十六进制数

2、shell脚本的执行方法

①.写一个shell脚本

vim test.sh
 

#!/bin/bash             #固定写法,执行复杂的人家交互时必须要加,建议每次写时加上 。
echo "123456! "         # !后面一定要加空格,否则无法正常执行。

② .两种执行方法:

A.赋予执行权限直接运行  (建议使用此种方法)   

[root@itpuxhsdb52 ~]# vi test.sh
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# chmod 755 test.sh
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# /root/test.sh   #绝对路径下执行(建议使用这种)
123456! 
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# ./test.sh       #相对路径下执行
123456! 
[root@itpuxhsdb52 ~]#

B.通过bash调用执行脚本(可以不赋予执行权限)

[root@itpuxhsdb52 ~]# bash test.sh 
123456! 
[root@itpuxhsdb52 ~]# 

三、Bash的基本功能

1、历史命令

 1)历史命令的查看

history [选项] [历史命令保存文件]

选项:

        -c :清除历史命令。包括缓存和文件中的历史命令 (此参数一般不建议使用)。

        -w:把缓存中的历史命令写入历史命令保存文件。如果不手工指定历史命令保存文件,则默认放入历史命令保存文件 ~/.bash_history中 。 

历史命令保存条数的设置:

vi /etc/profile

...省略部分输出...

HISTORY=1000

...省略部分输出...

2) 历史命令的调用

如果想要使用原先的历史命令有以下几种方法:

  • 使用上下键箭头调用以前的历史命令
  • 使用“!n” 重复执行第n条历史命令
  • 使用“!!”重复执行上一条命令
  • 使用“!字串” 重复执行最后一条以该字串开头的命令
  • 使用“!$”重复上一个命令的最后一个参数

2、命令与文件的补全

tab键

3、命令别名

alias #查询系统中已经命令好的别名 。

设定命令别名

        alias 别名='原命令'

例如:

        alias cp='cp -i'

        alias l.='ls -d .* --color=auto'

别名永久都生效的方法:

可以把别名写入环境变量配置文件“~/.bashrc” : vi /.bashrc   执行 source .basgrc 生效 。

别名的优先级:

1、第一顺序位为绝对路径或相对路径执行的命令;

2、第二顺序位执行别名;

3、第三顺序为执行Bash的内部命令;

4、第四顺位执行按照$PASH环境变量定义的目录顺序找到的第一个命令 。

4、Bash常用快捷键

快捷键作用
ctrl+A把光标移动到命令行开头。
ctrl+E把光标移动到命令行尾。
ctrl+C强行终止当前的命令。
ctrl+L清屏。
ctrl+U删除或剪贴光标之前的命令。
ctrl+K删除或剪贴光标之后的命令。
ctrl+Y粘贴ctrl+U或ctrl+K剪贴的命令。
ctrl+R在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索 。

5、输入输出重定向

        1).Bash的标准输入输出

设备设备文件名称文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出

        2).输出重定向

类型

符号作用
标准输出重定向命令>文件以覆盖的方式,把命令的正确输出输出到指定的文件或设备中。
命令>>文件以追加的方式,把命令的正确输出到是定的文件或设备中。
标准错误输出重定向错误命令 2>文件以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中。
错误命令 2>>文件以追加的方式,把命令的错误输出输出到指定的文件或设备当中。
正确输出和错误输出同时保存命令 > 文件 2>&1以覆盖的方式把正确输出和错误输出都保存到同一个文件中。
命令 >> 文件 2>&1以追加的方式,把正确输出和错误输出都保存到同一个文件中。
命令 &>文件以覆盖的方式把正确输出和错误输出都保存到同一个文件中。
命令 &>> 文件以追加的方式,把正确输出和错误输出都保存到同一个文件中。
命令 >> 文件1 2>> 文件2把正确的输出追加到文件1中,把错误的输出追加到文件2中。

    3)、输入重定向

wc [选项] [文件名]

选项:

        -c:        统计字节数

        -w:        统计单词数

        -l:        统计行数

6、多命令顺序执行

多命令执行符格式作用
;命令1; 命令2多个命令顺序执行,命令之间没有任何逻辑。
&&命令1&&命令2

当命令1正确执行时,命令2才会执行

当命令1执行不正确时,则命令2不会执行

||命令1|| 命令2        

当命令1执行不正确时,则命令2才会执行

当命令1 正确执行时,命令2则不会执行

root@itpuxhsdb52 ~]# llll  && echo yes || echo no
bash: llll: command not found...
no
[root@itpuxhsdb52 ~]# 
root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# date  && echo yes || echo no
Thu Jun 16 23:00:13 CST 2022
yes
[root@itpuxhsdb52 ~]#

7、管道符

        1)、行提取命令

grep [选项] "搜索内容" 文件名 

选项:-A 数字:        列出符合条件的行,并列出后续的n行

          -B数字:         列出符合条件的行,并列出前面的n行

           -c :                    统计找到符合条件字符串的次数

           -i :                    忽略大小写

           -n :                   输出行号

            -v:                   反向查找

          --color=auto      搜索出的关键字用颜色表示

         

[root@itpuxhsdb52 ~]# grep "/bin/bash" /etc/passwd
root:x:0:0:root:/root:/bin/bash
user1:x:1000:1000:user1:/home/user1:/bin/bash
oracle:x:61001:60001::/home/oracle:/bin/bash
[root@itpuxhsdb52 ~]# 

 2)、find与grep的区别

        find命令是在系统当中查找符合条件的文件名,如果需要模糊查询,使用通配符进行匹配,搜索时文件名完全匹配 。

[root@itpuxhsdb52 ~]# find . -name "test.sh"
./test.sh
[root@itpuxhsdb52 ~]# 

        grep是在文件当中符合条件的字符串,如果需要模糊查询,则使用正则表达式进行匹配,搜索时字符串是包含匹配。

8、通配符

通配符作用
?匹配一个任意字符
*匹配0个或多个任意字符,也就是可以匹配任何内容
[]匹配括号中任意一个字符。例如[abc]  . 代表一定匹配一个字符,或者是a,或者是b,或者是c
[-]匹配括号中任意一个字符。例如[a-z] ,代表匹配任意一个小写字母。
[^]逻辑非,表示不是括号内的一个字符。例如 [^0-9]  代表匹配一个不是数字的字符 。

9、Bash中其他特殊符号

符号作用
‘’单引号。在单引号中所有的特殊符号(如:$  ^  反引号)没有特殊含义。
" "

双引号。在双引号中特殊符号都没有特殊含义,但是”$“ 、”^“ 、"\"是例外,拥有”调用变量的值“、"引用命令"和转义符的特殊含义。

``反引号。反引号括起来的内容就是系统命令,在Bash中会先执行它。和$()作用一样,不过推荐使用$(),因为反引号非常容易看错。
$()和反引号作用一样,用来应用系统命令。
()用于一串命令执行时,() 中的命令会在子shell中运行 。
{}用于一串命令执行时,{}中的命令会在当前shell中执行。也可以用于变量变形与替换 。
[]用于变量的测试。
#在设立了脚本中,#开头的代表注释。
$用于调用变量的值,如果需要调用变量name的值时,需要用$name 的方式得到变量的值。
\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将
[root@itpuxhsdb52 ~]# name=sjw
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# echo '$name'
$name
[root@itpuxhsdb52 ~]# echo "$name"
sjw
[root@itpuxhsdb52 ~]# ##############################################
[root@itpuxhsdb52 ~]# a=`date`
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# echo $a
Fri Jun 17 00:48:16 CST 2022
[root@itpuxhsdb52 ~]# ##############################################
[root@itpuxhsdb52 ~]# b=$(pwd)
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# echo $b
/root
[root@itpuxhsdb52 ~]################################################
root@itpuxhsdb52 ~]# name=123456
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# (name=7890; echo $name)
7890
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# 
[root@itpuxhsdb52 ~]# echo $name
123456
[root@itpuxhsdb52 ~]# ###############################################

大括号与小括号的区别:

  • () 执行一串命令时,需要重新开一个子shell进行执行
  • {} 执行一串命令时,是在当前shell执行;
  • ()和{} 都是把一串的命令放在括号里面并且命令之间用;号隔开 ;
  • ()最后一个命令可以不用封号;
  • {} 最后一个命令要用封号;
  • {}的第一个命令和左括号之间必须要有一个空格;
  • () 里的各命令不必和括号有空格;
  • ()和{}中括号里面的某个命令的重定向只影响该命令,但该括号外的重定向则影响到括号里面的所有命令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值