shell篇(后续还有,记得点赞关注收藏三连!!!)

本文详细介绍了Shell编程中的基础概念,如文件描述符、输出重定向的使用,以及bash-completion、历史记录、别名、快捷键、管道操作、脚本规范和变量管理等内容。
摘要由CSDN通过智能技术生成

第十五天

初识shell

文件描述符与输出重定向:
在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 
0: Standard Input (STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output (STDERR)
在标准情况下, 这些FD分别跟如下设备关联:
stdin(0): keyboard 键盘输入,并返回在前端
stdout(1): monitor 正确返回值 输出到前端
stderr(2): monitor 错误返回值 输出到前端

>a.txt
>1>a.txt
>2>a.txt
>&>a.txt
1>&2
2>&1
一般来说, "1>" 通常可以省略成 ">".
1>&2 正确返回值传递给2输出通道 &2表示2输出通道,之前如果有定义标准错误重定向到某log文件,那么标准输出也重 定向到这个log文件,如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道. nginx -V
例子. 当前目录下只有a.txt,没有b.txt
[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1
[root@redhat box]# cat file.out
ls: b.txt: No such file or directory
a.txt
现在, 正确的输出和错误的输出都定向到了file.out这个文件中, 而不显示在前端 =================================
[root@redhat tmp]# cat >> b.txt <<! (输入重定向一般用,EOF,前文用的是!)
ni hao a hahafvs
!
[root@redhat tmp]# cat b.txt
ni hao a haha

image-20240123145232328

image-20240123150016367

image-20240123150254539

image-20240123155035702

补全   bash-completion # 增加补全
历史   history
别名   alias
快捷键  ctrl+k 删除光标前的 ctrl+u 删除光标后的 ctrl+a 移动至命令行最前  ctrl+u 移动至命令行最后。
前后台作业 输入:sleep1000(系统休眠1000秒),ctrl+z(停止进程),bg(前台挪至后台),fg(后台挪前台)
管道
命令排序执行
; && || 
; 命令分割,在一行中执行多条语句
&& 一行中执行多条语句,前成功后面再执行
|| 一行中执行多条语句,前面不成功,后面再执行
通配符
{} ?*
正则表达式 脚本
查看历史命令
		history 						/etc/profile 下的historysize 可以修改
调用历史命令 	
    上下健
    esc . 上一条命令的最后一个参数
    Ctrl+r 在历史命令中查找,输入关键字调出之前的命令 
别名
		查看别名
			alias
		设置别名 
			临时设置
      # alias aa='df -Th'
      # aa
		永久设置
      # vim /root/.bashrc
小小技巧:显示历史命令执行时间 
		1.设置变量:
			HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S" 
		2.再次执行history查看结果

输入:history 查看历史命令

image-20240123110201429

修改查看历史命令的范围(一般默认是1000条),进公司为了安全会尽量设置的少一点。

输入:vim /etc/profile

image-20240123110622882

设置历史命令的时间

输入:vim /etc/profile 加上HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "

image-20240123115401820

最后输入:source /etc/profile,就设置成功了。

二、shell 脚本规范

# vim helloworld.sh   ---.sh代表这个文件是个shell脚本,第一个原因,让别人认的这个是shell脚本,sh后缀有高亮显示。
拓展名后缀,如果省略.sh则不易判断该文件是否为shell脚本
1. #!/usr/bin/env bash ---shebang蛇棒, 解释器, 翻译 2. #
3. #
3. # Author: newrain
4. # Email: newrain@163.com           ---这就是注释, 你没看错
5. # Github: https://github.com/newrain001
6. # Date: 2019/**/**
7. printf "hello world\n"
解释:第一行: “#!/usr/bin/env bash”叫做shebang, shell语法规定shell脚本文件第一行为整个文件的解释器
第二行: 为“#”开头的行为注释行默认不会被程序所读取, 用来说明文件及标定所属人员使用, 也可用来解释程序 第七行: 为格式化打印语句printf, printf可以把后面的“hello world”打印到指定的终端中, \n 为换行符

image-20240123173315720

image-20240123173349673

执行脚本方式(五种方式)
1、 sh 脚本.sh
2、 bash 脚本.sh
3、 ./脚本.sh  # 需要执行权限(以上文脚本为例:chmod +x helloworld.sh )
4、 .  脚本.sh
5、 source 脚本.sh
其中 sh和bash是一种类型;source和.是一种类型;./是单独一种类型,需要修改权限。
[root@newrain sh]# ls
count.sh hello.sh parameter2.sh parameter.sh  #ls命令正确执行
[root@newrain sh]# echo $?
0
#预定义变量"$?"的值是0,证明上一条命令正确执

[root@newrain sh]# vim variable.sh 
#!/bin/bash
echo "The current process is $$" 
#输出当前进程的PID 
#这个PID就是variable.sh脚本执行时生成的进程的PID

[root@newrain sh]# sleep 3000 & 
[1] 12165 
#符号"&"的意思是把命令放入后台执行 
[root@newrain sh]# echo $!
12165

image-20240123174621450

修改第五种权限

输入:chmod u+x helloworld.sh

image-20240123175121873

三、变量的类型

  • 变量

    • bash作为程序设计语言和其它高级语言一样也提供使用和定义变量的功能
  • 预定义变量、环境变量、自定义变量、位置变量

预定义变量
$? 最后一次执行的命令的返回状态。如果这个变量的值为 0,则证明上一条命令正确执行;如果这个变量的值为非 0 ,则 证明上一条命令执行错误
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)

[root@newrain sh]# ls
count.sh hello.sh parameter2.sh parameter.sh  #ls命令正确执行
[root@newrain sh]# echo $?
0
#预定义变量"$?"的值是0,证明上一条命令正确执

[root@newrain sh]# vim variable.sh 
#!/bin/bash
echo "The current process is $$" 
#输出当前进程的PID 
#这个PID就是variable.sh脚本执行时生成的进程的PID

[root@newrain sh]# sleep 3000 & 
[1] 12165 
#符号"&"的意思是把命令放入后台执行 
[root@newrain sh]# echo $!
12165

&?的操作演示如下图所示

image-20240123175931073

$$的操作演示如下图所示

image-20240123180033994

$!的操作演示如下图所示

image-20240123180110164

自定义变量
		定义:变量名称=值
				变量名称:只能由字母,数字,下划线组成,不能以数字开头;
				注意:应该让变量名称有意义;
				= 赋值符号 前后不能有空格 ;
				值: 所有的字符串和数字都可以;
				引用变量: $变量名 或 ${变量名}。
		示例:
    		[root@newrain ~]# a=100
				[root@newrain ~]# echo $a
				100     (如图一所示)
				[root@newrain ~]# echo $aa
                                # 这里输出为空,因为解释器认为$aa是变量(如图二所示)
				[root@newrain ~]# echo ${a}a
				100a     (如图三所示)

				查看变量: echo $变量名 set(所有变量:包括自定义变量和环境变量)
				取消变量: unset 变量名 仅在当前shell中有效
				作用范围: 仅在当前shell中生效

图一:

image-20240123192139956

图二:

image-20240123192255527

图三:image-20240123192505489

环境变量
		shell在开始执行时已经定义好的 
		env 查看所有环境变量(图一所示)
		set 查看所有变量 (图二所示)
				环境变量拥有可继承性:export之后就拥有继承性
		export 导出变量(作用范围)   (图三所示)
临时生效
    [root@newrain ~]# IPADDR=192.168.1.1
		[root@newrain ~]# echo $IPADDR
		192.168.1.1
永久生效
		写到4个登陆脚本中 ~/.bashrc ~/profile 更好放在/etc/profile.d/* 下建立独立的环境变量配置文件
		常用环境变量:USER UID HOME HOSTNAME PWD PS1 PATH
PATH:存储所有命令所在的路径

图一:

image-20240123194109271

图二:

image-20240123194035374

图三:

image-20240123194222899

常用环境变量:

1、USER :echo $USER(代表root)

image-20240123195229878

2、UID:输入echo $USER (代表root)

image-20240123203422295

3、 HOME:输入echo $HOME(代表家目录)

image-20240123203837575

4、 HOSTNAME:echo $HOSTNAME(代表着主机名)

image-20240123203944678

5、 PWD:输入echo $PWD(代表现在的位置)

image-20240123204032286

6、 PS1:输入echo $PS1

image-20240123204857611

7、 PATH:输入echo $PATH(存储所有命令所在的路径)

image-20240123204721815

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值