linux shell编程(一)

1. 脚本执行方式

# 如果直接使用文件路径,如果没有x权限会提示权限不够 
./test.sh
# 使用bash或者sh解释器不需要获取执行权限
bash test.sh
sh test.sh

上面几种方式都是通过开启子进程的方式来启动的bash:

# 通过pstree命令可以查看到进程树
# 都是在bash终端下开启了一个子进程(bash or ./test.sh)
sshd——sshd——bash——test.sh——sleep # ./test.sh
sshd——sshd——bash——test.sh——sleep # bash test.sh


# 直接使用bash
source test.sh
. test.sh
# 使用pstree查看进程树,直接在bash下面执行了,没有开启子进程
sshd——sshd——bash——sleep

上面的进程树,sshd下面的bash就是我们在xshell或者mobaxterm中开启的shell进程,如果使用source直接在当前bash下执行,按下ctrl+c,就会退出整个终端

2.输入、输出

# 将用户输入的值绑定的key1变量中
# 默认不支持\字符,需要使用-r选项支持\字符
read key1

# -p增加提示
# -s 输入的内容敲回车后不显示在终端上
read -s -p "请输入用户名" key2

# 设置输入超时时间
echo $key1"123"

文件描述符:

  • 1:标准输出
  • 2: 标准错误输出
  • 0:标准输入

ls命令为例:

# 将标准输出重定向到info.log中
ls test.sh > info.log 
# 如果test.sh不存在,上述命令还会在终端上打印错误信息
# 将标准错误输出重定向到error.log中: 2>
ls test.sh 2> error.log

# 同时将标准输出和标准错误输出重定向到不同的文件中
ls test.sh > info.log 2> error.log

# 同时将标准输出和标准错误输出重定向到相同文件中
 ls test.sh &> runtime.log

# 标准输出重定向到错误输出
ls test.sh 1>&2

# 标准错误输出重定向到标准输出
ls test.sh 2>&1

虽然标准输出和标准错误输出互相转换在终端中看不出本质区别,但是显示的通道是不一致的

例子:将标准输出重定向到文件,将错误输出重定向到标准输出从而实现info和error都导入到同一文件中

ls test.sh > info.log 2>&1

linux黑洞

在linux中,有一个特殊的设备/dev/null,无论写入什么都会被系统吞噬。
如果有一些错误信息

3.各种引号

单引号

可以屏蔽特殊符号(双引号不可以)

num=1
echo $num # 1
echo "$num" # 1
echo '$num' # $num

反引号

反引号的作用是进行命令替换,输出命令的执行结果

# 将/var/log下的日志文件打包
tar -zcf /root/log-`date` /var/log

4.变量

命名规则

  1. 不能包含特殊符号,仅仅支持大小写字符 + 下划线(_)
  2. 不能以数字开头
# 定义变量,注意等号两边不能有空格
a=1 
# 输出
echo $a
# 取消变量定义
unset a

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值