初识Shell

定变量并查看

先赋值 x=XXX # x:变量 XXX是所赋的值

[root@localhost ~]# a=test
[root@localhost ~]# echo $a
test

查看别名与定义别名

alias 定义别名

[root@localhost ~]# alias                     #查看已经定义的别名
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

alias X='指令' #X是指你想定义成什么
指令指的就是你想定义的linux指令

[root@localhost ~]# alias e='echo'
[root@localhost ~]# e 11
11

取消已经设置的别名

unalias X

[root@localhost ~]# unalias e
[root@localhost ~]# e 111
-bash: e: command not found

Bash shell 的内建命令 TYPE

[root@localhost ~]# type alias
alias is a shell builtin
[root@localhost ~]# type ls
ls is aliased to `ls --color=auto'

用途: 用来测试命令的类型
type [-tpa] name
选项和参数:
:不加任何选项,会显示name是外部命令,还是bash内置命令
-t //会将name以下面这些关键字来表示出他的意义:
file :外部命令
alias :命令别名
builtin :bash内置命令
不显示任何数据时,表示name不是任何命令

输入输出 与 重定向

文件描述符与输出重定向:
在 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 错误返回值 输出到前端

0 标准输入:键盘
1 标准正确输出

[root@localhost ~]# echo 'hello world' 1> hello.txt    
     #1>把正确输出重定向到hello.txt中,默认> = 1>
[root@localhost ~]# cat hello.txt 
hello world

2标准错误输出

[root@localhost ~]# ls shdasdhaskj 2>error.txt
[root@localhost ~]# cat error.txt 
ls: cannot access shdasdhaskj: No such file or directory

&混合输出

[root@localhost ~]# ls /home/ /ssjkasd &> fix.txt
[root@localhost ~]# cat fix.txt 
ls: cannot access /ssjkasd: No such file or directory
/home/:
alice
t2sh

输入重定向

[root@localhost ~]# cat >> a.txt < hello world!
> hello shell!
> EOF        
[root@localhost ~]# cat a.txt 
hello world!
hello shell!

清空文档(适用于系统文件的清空)

[root@localhost ~]# cat a.txt 
hello world!
hello shell!
[root@localhost ~]# > a.txt 
[root@localhost ~]# cat a.txt 

shell的分类和切换

[root@newrain ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

默认shell: bash shell
centos中脚本使用的默认shell 为/usr/bin/sh
查看当前正在使用的shell
echo $SHELL
shell 的切换
vim /etc/passwd 编辑登录shell


初试shell脚本

[root@localhost ~]# vim start.sh

echo "显示磁盘分区"
lsblk   #shell指令
echo "*********************************"                  
echo "显示内存占用量"
free -h


sh start.sh     #sh 表示用shell运行

显示磁盘分区
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   30G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   29G  0 part 
  ├─centos-root 253:0    0   26G  0 lvm  /
  └─centos-swap 253:1    0    3G  0 lvm  [SWAP]
sr0              11:0    1  4.2G  0 rom  
**************************************************
显示内存占用量
              total        used        free      shared  buff/cache   available
Mem:           5.7G        170M        5.4G        8.6M        158M        5.3G
Swap:          3.0G          0B        3.0G
-----------------------------------------------------------
如果内存占用过高 请运行ffm.sh

vim ffm.sh #创建一个释放内存的脚本

echo 3 > /proc/sys/vm/drop_caches
echo "buffer/cache释放完"
-----------------------------------------------------------
运行
[root@localhost ~]# sh ffm.sh 
buffer/cache释放完

sh -x 用于shell脚本查错


##藏终端输入:**stty**
[root@localhost ~]# stty -echo 隐藏输入
[root@localhost ~]# -bash: sss: command not found
[root@localhost ~]#stty echo 显示输入

应用示例

[root@localhost ~]# vim echo.sh 
stty -echo
read -p "请输入密码:"
stty echo
[root@localhost ~]# sh echo.sh 
请输入密码:         #此时你输入密码是不可见的,输入完成后恢复

Bash的功能

Bash的初始化过程

bash处理初始化文件的顺序:
if /etc/profile exists,source it,
if ~/.bash_profile exists,source it,
if ~/.bashrc exists,source it,
else if ~/.bash_login exists,source it,
else if ~/.profile exists,source it.

shell编程特点

bash特性:
补全
历史
别名
快捷键
前后台作业
重定向
管道
命令排序执行
; && ||
通配符
{} ? *
正则表达式
脚本

Bash部分快捷键(常用)

Ctrl+a 切换到命令行开始(跟home一样,但是home在某些unix环境下无法使用)
Ctrl+e 切换到命令行末尾
Ctrl+u 清除剪切光标之前的内容
Ctrl+k 清除剪切光标之后的内容
Ctrl+y 粘贴刚才锁删除的字符
Ctrl+r 在历史命令中查找,输入关键字调出之前的命令

bash脚本的执行

./scripts ----------#scripts是脚本名称
/shelldoc/scripts
. ./scripts 使用当前shell执行
source ./scripts 使用当前shell执行 比如cd /tmp会改变当前shell环境,但是其他的方式不会
bash scripts


子shell

(指令) 表示使用shell的子进程来运行指令

[root@localhost ~]# pwd
/root
[root@localhost ~]# (cd /opt;mkdir test)          #利用 ; 可以依次执行多个指令
[root@localhost ~]# pwd
/root
[root@localhost ~]# ls /opt/
test

bash 的登录主机欢迎信息: /etc/issue, /etc/motd

当你登录到系统之前,想了解这个系统的一些简单的硬件及软件版本信息等可以做如下设置:


/etc/issue设置指令

/etc/motd //编辑这个文件,会在用户登录之后看到一些欢迎信息

[root@localhost ~]# echo 来了 老弟!> /etc/motd
exit
ssh : 1.1.1.1(你的服务器ip)
Last login: Tue Dec 17 02:50:05 2019 from 10.3.134.175
来了 老弟!

文件系统及程序限制关系

image.png

记住ulimit -a 即可

永久生效,编辑 /etc/security/limits.
格式:

用户 限制的级别 类型 限制的值
比如

t2sh soft nofile 100
t2sh hard nofile 100

nofile 限制文件打开数量
nproc 网络连接数

退出后生效

通配符与特殊符号

通配符 * 指的是所有
通配符表格:


image.png
[root@localhost ~]# ls [a-z].txt
a.txt  b.txt  c.txt
[root@localhost ~]# ls *[a-z].txt
1a.txt  2a.txt  3a.txt  4a.txt  5a.txt  a.txt  b.txt  c.txt  error.txt  fix.txt  hello.txt
[root@localhost ~]# ls ??.txt   #?指一定存在的任意字符
1a.txt  2a.txt  3a.txt  4a.txt  5a.txt

你可能感兴趣的:(初识Shell)