Shell基础

Shell 基础

Shell是一个C语言编写的脚本语言,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。

Shell 两大分类

1、图形界面Shell(GUI Shell)

GUI 为 Unix 或类 Unix 操作系统构造一个功能完善,操作简单以及界面友好的桌面环境;主流桌面有 KDE、Gnome 等…

2、命令行界面Shell(GLI Shell)

GLI 是在用户提示符下输入可执行指令的界面,在 Linux 系统上主流的 CLI 实现是 Bash

Shell 脚本

vim  shell.sh
#!/bin/bash
echo 'Hello world'

执行脚本四种方法

1、bash 解释器
bash  shell.sh
Hello world
2、sh 命令执行
sh  shell.sh
Hello world
3、source 命令执行
source  shell.sh
Hello world

#缩写
.  shell.sh
Hello world
4、添加执行权限
chmod  +x  shell.sh
./shell.sh
Hello world

sh bash source 区别

1、sh

打开一个 subshell 去读取、执行脚本,不需要有 执行权限
sh 是Linux 中运行 shell 的命令,是 shell 的解释器

2、bash

打开一个 subshell 去读取,执行脚本不需要有 执行权限

3、source

当前shell内 去读取、执行脚本 不需要有 执行权限
source 方式运行脚本时,就是让脚本在当前process内执行,而不是产生一个 child process
来执行;由于所有执行结果均于当前 process 内执行,若脚本的环境有所改变,也会改变当前 process 环境

Shell 变量

变量命名注意事项

1、变量名和等号之间不能有空格
2、命名只能以数字、字母、下划线组成;数字不能开头
3、不能使用标点符号;不能使用关键字
4、变量命名长度不能超过20
5、变量命名区分大小写

变量类型

局部变量

局部变量定义在shell脚本或命令中,只能在当前实例中有效,不能被其他shell启动的程序访问

环境变量

所有程序都可以访问环境变量;shell脚本中也可以自己定义环境变量

系统变量
$SHELL默认shell
$HOME当前用户家目录
$LANG默认语言
$PATH默认可执行程序路径
$PWD当前路径
$UID当前用户 ID
$USER当前用户
$HISTSIZE历史命令大小
$RANDOM随机生成一个2-32767的整数
$HOSTNAME主机名

单引号双引号

单引号
www=123
echo '$www 123'
$www 123

单引号可以让字符原样输出

双引号
www=123
echo "$www 123"
123 123

双引号可以解释特殊符号

Shell 字符串

获取字符串长度
str='hello world'
echo ${#str[@]}
11
字符串切片
#截取前五个字符 含头不含尾
str='hello world'
echo ${str:0:5}
hello

#截取后五个字符
str='hello world'
echo ${str:(-5)}
world

#截取从倒数五位后的五位 包括倒数第五位
str='hello world'
echo ${str:(-5):5}
world
字符串替换

“/” 但斜杠表示只替换正则匹配到的第一个字符 “//” 双斜杠表示替换正则匹配到的所有字符

#不改变原字符串
str='hello world'
echo ${str/hello/HELLO}
HELLO world

#正则匹配替换
str='hello world 123'
echo ${str/[0-9]/w}
hello world w23

str='hello world 123'
echo ${str//[0-9]/w}
hello world w
字符串截取

“#” 去掉左边,最短匹配模式;“##” 最长匹配模式

URL="http://www.baidu.com/baike/user.html"
echo ${URL#*.}
baidu.com/baike/user.html

URL="http://www.baidu.com/baike/user.html"
echo ${URL##*.}
html

“%” 去掉右边,最短匹配模式;“%%” 最长匹配模式

URL="http://www.baidu.com/baike/user.html"
echo ${URL%.*}
baidu.com/baike/user.html

URL="http://www.baidu.com/baike/user.html"
echo ${URL%%.*}
http://wwww
变量状态赋值
${VAR:-'string'}	#如果 VAR 变量为空则返回string
${VAR:+'string'}	#如果 VAR 变量不为空则返回string 
${VAR:='string'}	#如果 VAR 变量为空则将 string 赋值给 VAR	
${VAR:?'string'} 	#如果 VAR 为空则将 string 输出到命令行
VAR=
echo ${VAR:-'VAR为空'}
VAR为空
VAR=123
echo ${VAR:+'VAR不为空'}
VAR不为空
VAR=
echo ${VAR:='VAR为空赋值'}
VAR为空赋值
VAR=
echo ${VAR:='VAR为空'}
-bash: VAR: VAR为空
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值