Shell学习记录

快速学习shell笔记

一. 基础理解

  • $SHELL是全局共享的读取解析器的环境变量,全局环境变量是所有的shell脚本都可以读取使用的变量;

  • 创建shell脚本,首行要添加解析器

#!/bin/bash   #默认解析器
  • 关于配置文件

(1)全局配置:

/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
(2)个人配置:

~/.bash_profile
~/.bashrc

  • 交互式shell和非交互式shell,登录shell和非登录式shell

简单理解,交互式和非交互式其实就是用户的参与,老实说还没感觉到有什么作用,初学期用的多交互式,后面写shell script就换非交互式;登录shell环境和非登录shell环境总要是,不同的用户使用host,有些不需要通过用户密码登录,然后就可以使用一些功能,有不少是有nologin权限的

执行exit命令,退出一个shell(登录或非登录shell);
执行logout命令,退出登录shell(不能退出非登录shell)。

[root@93bef2b01622 etc]# cd ..
[root@93bef2b01622 /]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
[root@93bef2b01622 /]# 

使用./test.sh或者 bash ./test.sh执行脚本的时候,是开启一个子shell,这个子shell能继承上一个父shell的变量,而这个子shell的变量,随着子shell的退出而消失。当我们用. test.sh 或者source test.sh时,不开启子shell,在当前shell运行,子shell中的所有值都影响当前。
一般我们对shell进行一些配置的时候,通常都是对~/.bashrc 和/etc/bashrc这两个文件进行一些配置。

登录shell环境加载配置文件顺序和非登录shell环境配置文件加载顺序对比


二. 变量

全局变量
echo $PATH  # 设置命令搜索路径
echo $HISTFILE #查看历史命令记录列表,/root/.bash_history
echo $LANG  # 设置当前语言环境,zh_CN.UTF-8
echo $HOME  # 设置当前用户主目录
echo $SHELL #设置当前默认解析器
echo $PWD # 显示当前所在目录
...
name=it
name=it02  #修改
$name  #查询
#  ${name}
unset name #删除变量

# 定义只读变量,无法unset删除,重启比较快
readonly name=12;

# 定义可以父子脚本共享的变量,或者说父脚本定义,子脚本可以继承/读取
export age=12;
特殊变量
格式作用备注
$n表示用于接受脚本执行时传入的参数,其中$1~$9表示获取第一个参数~第9个传入的参数,$0表示当前脚本文件的名称,若参数超过10个,获取对应参数格式为${index};
$#表示当前脚本输入参数的个数
$* $@获取所有的输入参数,如果使用双引号标记,前者获取一个拼接字符串,后者获取一个列表字符串,可以当成数组
$?用于获取上一个shell命令的退出状态码,或者是函数的返回值,每一个shell命令其实都有一个返回值,用于说明命令执行结果
$$用于获取当前shell环境的进程的id号,每执行一个shell命令就是开启一个shell子进程

添加环境变量
vim /etc/profile  # G可以自动定位到文件末尾,g可以自动定位到文件头


# 开始插入环境变量到profile
export VAR=var

# 保存退出,重新加载配置文件
source /etc/profile

# 可以查询配置成功
echo $VAR
切换shell环境
# 切换成登陆环境,执行shell
sh/bash -l/--login xx.sh #先按照流程加载登陆环境配置文件初始化环境变量后再执行文件


# 切换成非登陆环境,执行shell 
bash
sh/bash xx.sh


环境变量的删除除了要将/etc/profile文件的对应变量删除,还要unset 变量名,目的是清除内存中的变量;
识别当前环境可以用echo $0

输出-bash登陆环境
输出bash非登陆环境

字符串变量

可以通过'' "" 以及不使用引号创建,但是''创建的字符串在内部含有别的变量时不会被解析,而是原样输出;不用引号也可以解析字符串内部含有的变量,但是不能包含空格;推荐""创建字符串;

echo ${var:start:length}  #截取var字符串从start起始位置开始length长度的字符串
echo ${var:start} #截取var字符串从start起始位置开始至右边全部剩余字符串
echo ${var:0-start:length} #截取var字符串从右边第start个字符开始,向右截取length长度字符串
echo ${var:0-start}
echo ${var#*chars} #截取var字符串从左边第一个chars字符向右剩余的字符串
echo ${var##*chars} # 截取var字符串从左边最后一个chars字符向右剩余的字符串
echo ${var%chars*} #截取car字符串从右边第一个chars左边剩下的字符串
echo ${var%%chars*}



三.test指令

一般用于文件的测试,也可以对整型数值,字符串进行相关的判断;

参数说明
-e 文件名如果文件存在则为真
-r文件名如果文件存在且可读则为真
-w文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s文件名如果文件存在且至少有一个字符则为真,也就是不为空
-d 文件名如果文件存在且为目录则为真
-f文件名如果文件存在且为普通文件则为真
-c文件名如果文件存在且为字符型特殊文件则为真
-b文件名如果文件存在且为块特殊文件则为真

四.输入输出重定向

就是将命令执行后的结果从默认的终端转移到文件

命令说明
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。

指令记录:

echo:输出打印到终端
echo ${var}:打印变量
echo ${#var};打印字符串的长度
touch:创建一个`.sh`脚本文件
vim:进入脚本文件`.sh`的编辑环境
cat:查看文件内容
pwd:查看当前目录
chmod:添加用户对于文件的操作权限,u,g,o,a表示不同类型的用户,所有者,所属组,以及其他人,所有用户;
+/-/=表示添加/删除/设置 权限
r/w/x表示读/写/执行权限,所代表的权限数字4/2/1
对应的不同用户类型具有不同的权限,比如u=rwx,就是7;g=r-x=5,o=r-x=5,也就是755;
ls:查看文件列表详情,ls -al
env:查看系统环境变量
set:查看各种变量函数等

alias:定义命令的别名
alias psList="ps -aux"
unalias psList

echo -n:输出不换行
echo -e:输出字符串可以内部含有转义字符并解析
printf:打印

read:读取包括重定向的字符串,默认从终端读取
read -n(字符串长度限制) -s(静默模式,适合密码输入) -p(添加提示信息,后面跟字符串) -t(设置时间限制) var1 var2 ...


#使用 . 号来引用test1.sh 文件
. ./test1.sh
# 或者使用以下包含文件代码
# source ./test1.sh




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值