首页 > 系统相关 >@解释器Bash shell基础

@解释器Bash shell基础

时间:2022-10-09 23:31:44浏览次数:54  
标签:解释器 shell echo Bash home txt root localhost


Bash shell基础

文章目录

一.介绍

类比:

shell 语法=========python语法
bash解释器==========Python解释器


#shell是一门解释型,弱类型,动态语言

二、变量

1、什么是变量

量:记录下的事物的状态
变:事物的状态是可以发生变的

#变量是一种存取内存的机制

2、为何要用变量

#为了让计算机能够像人一样记下事物的状态,记不是目的,目的是为了以后取出来用
#并且事物的状态是可以改变的

3、如何用变量

#原则:先定义,后引用
[root@localhost ~]# x=1
[root@localhost ~]# x=2
[root@localhost ~]# echo $x
2

[root@localhost ~]# name1=egon
[root@localhost ~]# echo $name1
egon

[root@localhost ~]# echo ${name1}
egon

[root@localhost ~]# unset name1
[root@localhost ~]# echo $name1
[root@localhost ~]#
[root@localhost ~]# domain=www.baidu.com

[root@localhost ~]# ping -c1 $domain
[root@localhost ~]# name=egon
[root@localhost ~]# echo "hello $name"
示列:
[root@localhost ~]# vim heartbeat.sh
[root@localhost ~]# cat heartbeat.sh
#!/bin/bash
ip=192.168.11.20
ping -c1 $ip &>/dev/null
if [ $? = 0 ];then
echo "host $ip
else
echo "host $ip
fi
[root@localhost ~]# chmod +x heartbeat.sh
[root@localhost ~]# ./heartbeat.sh
host 192.168.11.20 is down!!!

三、引号对变量的影响

1.双引号:表示弱引号

[root@localhost ~]# name=egon
[root@localhost ~]# echo "hello $name"

2.双引号:表示强引号

[root@localhost ~]# echo 'hello $name'
hello $name

3.反引号:表示只取结果

[root@localhost ~]# today=`date +%F`
[root@localhost ~]# echo $today
2020-08-11
[root@localhost ~]# today=$(date +%H:%M:%S)
[root@localhost ~]# echo $today
22:05:55


示列:
[root@localhost ~]# tar czf `date +%F`_bak.tar.gz /tmp

4.注意:对于变量包含空格时,应需加上双引号包含

[root@localhost ~]# msg="hello egon"
[root@localhost ~]# echo $msg

四.变量的作用域

1.环境变量:在当前shell及子shell生效

2.自定义变量: 仅在当前shell中生效

[root@localhost ~]# x=1
[root@localhost ~]# export x
[root@localhost ~]# bash
[root@localhost ~]# echo $x
set 查看所有变量(包含自定义变量和环境变量)
env

3.系统环境变量所需要配置的文件(系统定义的)

̵/etc/profile
/etc/bashrc
/.bashrc
/.bash_profile

5.系统环境变量

[root@localhost ~]# echo $PS1
[\u@\h \W]\$
[root@localhost ~]# echo $HOSTNAME
localhost.localdomain
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $UID
0
[root@localhost ~]# echo $SHELL
/bin/bash
[root@localhost ~]# echo $HISTSIZE
5
[root@localhost ~]# echo $MAIL
/var/spool/mail/root
[root@localhost ~]# echo $PATH

五.影响bash shell的一些文件

1.系统环境变量配置文件:
̵/etc/profile
/etc/bashrc
/.bashrc
/.bash_profile
#以上系统配置文件登录shell执行顺序:su egon
login shell: 
1. /etc/profile #系统级别配置文件
2. ~/.bash_profile #用户级别的配置文件(用户定义的环境变量)
3. ~/.bashrc #用户级别(定义别名)
4. /etc/bashrc #系统级
#在不登录时,执行两个文件顺序:su egon
non-login shell: 

1. /.bashrc #用户级
2. /etc/bashrc #系统级
#影响bash shell的其他文件,bash登录界面和欢迎界面
/etc/motd           #登录后显示的信息 
/etc/issue #登录前显示的信息(本地)
/etc/issue.net #登录前显示显示的信息(网络登)
[root@localhost ~]# cat /etc/motd 

+--------------------------------------------+
| |
| 登录时显示的设置内容
|
| |

六. 元字符

1.shell语法中的特殊字符:

1>. ``与 ( ):取值的结果
[root@localhost ~]# echo `pwd`
/root
[root@localhost ~]# echo $(pwd)
/root


区别:$()可以嵌套,而``不能嵌套
[root@localhost ~]# echo $(ls $(pwd))
2>.~ 表示家目录
3>. . 与…
4>. !取反
root@localhost ~]# touch /test/{1.txt,2.txt,a.txt,aaa_bbb.txt}
[root@localhost ~]# find /test ! -name 1.txt
/test
/test/2.txt
/test/a.txt
/test/aaa_bbb.txt



[root@localhost ~]# ls /test/[!0-9].txt
/test/a.txt
[root@localhost# ls /test/[^0-9].txt
5>.@无特殊意义
6>.#注释
7>.$取值变量
[root@localhost ~]# x=1
[root@localhost ~]# echo $x
8>.% 、-、+、用算符
#bc是常用的linux计算工具,支持浮点型 

[root@localhost ~]# res=`echo 1+1 | bc`
[root@localhost ~]# echo $res
[root@localhost ~]# res=`echo 10 % 3 | bc`
[root@localhost ~]# echo $res
1
[root@localhost ~]# res=`echo 1.2+1.3|bc`
[root@localhost ~]# echo $res
2.5
[root@localhost ~]# res=`echo 5.0+3.0|bc`
[root@localhost ~]# echo $res
8.0
[root@localhost ~]# res=`echo "scale=2;5.0/3.0"|bc`
[root@localhost ~]# echo $res
1.66
[root@localhost ~]# res=`echo "scale=2;5.0/6.0"|bc`
[root@localhost ~]# echo $res
#expr不支持浮点型计算,且注意数字与运算符中的空格


[root@localhost ~]# res=`expr 5 / 3`
[root@localhost ~]# echo $res
1
[root@localhost ~]# res=`expr 1+1` #注意要有空格
[root@localhost ~]# echo $res
1+1
[root@localhost ~]# res=`expr 1 + 1`
[root@localhost ~]# echo $res
#$,(())同expr,不支持浮点型运算

[root@localhost ~]# echo $((1+1))
2
[root@localhost ~]# echo $((1.0+2.0))
-bash: 1.0+2.0: 语法错误:无效的算数运算符(".0+2.0")
# let 不支持浮点数运算,而且不支持直接输出,只能赋值 



[root@localhost ~]# let res=1+1
[root@localhost ~]# echo $res
2
[root@localhost ~]#
[root@localhost ~]# let res=50/5
[root@localhost ~]# echo $res
10
[root@localhost ~]# let c=1.3*3
-bash: let: c=1.3*3: 语法错误:无效的算数运算符( ".3*3")
9>. ^ 同!一样
10>. *表示任意多个字符
[root@localhost ~]# touch 1.txt 2.txt aa.txt aaa.txt
[root@localhost ~]# rm -rf *.txt
[root@localhost ~]# touch 1.txt 2.txt aa.txt aaa.txt a1c.txt
[root@localhost ~]# ls *.txt
11>.()表示在子shell中执行
[root@localhost ~]# (x=1)
[root@localhost ~]# echo $x
ଫአ
[root@localhost ~]# (umask 066;touch a.txt) # umask的设置只在子shell中有效
[root@localhost ~]# ll a.txt
-rw-------. 1 root root 0 8์月 13 15:22 a.txt
[root@localhost ~]# touch b.txt
[root@localhost ~]# ll b.txt
-rw-r--r--. 1 root root 0 8์月 13 15:23 b.txt
12>. _下划线:无特殊意义。可用于名字的声明
13>.= 等号:赋值,判断相等性
[root@localhost ~]# [ 1 = 1 ]    #条件1 = 1的左右两边必须有空格
[root@localhost ~]# echo $? # 判断上一条命令结果是否为真0=̾true
14>.|管道:把一个进程的结果传递给另一个进程
[root@localhost ~]# ps aux | grep python


xargs参数传递
[root@localhost ~]# find /home/ -type d -name "test*" |xargs ls
1.txt 2.txt 3.txt
[root@localhost ~]# ls /home/test
15>.\转移特殊字符
[root@localhost ~]# mkdir a\ b.txt 
[root@localhost ~]# ll
总用量 0
drwxr-xr-x. 2 root root 6 8์ 13 15:35 a b.txt

[root@localhost ~]# echo $RMB #默认会当成变量
[root@localhost ~]# echo '$RMB' #取消特殊意义
$RMB
[root@localhost ~]# echo \$RMB #取消特殊意义
$RMB
16>.[ ]条件测试
[root@localhost ~]# name="egon"
[root@localhost ~]# [ $name = "egon" ];echo $?
0
[root@localhost ~]# name="adf"
[root@localhost ~]# [ $name = "egon" ];echo $?
1
[root@localhost ~]# [ -d /test ];echo $?
17>.’'引号
''   #表示强引用
" " #弱引用
[root@localhost ~]# x=111
[root@localhost ~]# echo "$x"
111
[root@localhost ~]# echo '$x'
$x
18>. ; 与&& 与 || 连接多条命名
[root@localhost home]# gagaga;ls          # 无论前一条命令执行成功与否,都会执行后续命令
bash: gagaga: #未找到命令
egon
[root@localhost home]# gagaga && ls #只有前面一条命令执行成功后,才会执行后面一条命令
bash: gagaga: #未找到命令

[root@localhost home]# ls /test || mkdir /test #前面一条命令执行不成功,才会执行后面一条命令
19>./路径分隔符
20>. { }:指示包含
[root@localhost home]# touch /test/{0..9}.txt
[root@localhost home]# ls /test/
21>.&表示后台运行
[root@localhost home]# echo "hello";sleep 3;echo "world" &
22>.重定向
>   >> #输出重定向
< << #输入重定向


> #覆盖
>> #追加
[root@localhost home]# cat >> a.txt << EOF
> 111
> 222
> 333
> EOF

0#标准输入
1#标准正确输出
2#标准错误输出
&#标准正确和错误输出
[root@localhost home]# pwd 1>a.txt
[root@localhost home]# cat a.txt
/home
[root@localhost home]# gagag 2>a.txt
[root@localhost home]# cat a.txt
bash: gagag: #命令未找到
[root@localhost home]# gagaga &>/dev/null



< << #输出重定向
[root@localhost ~]# mysql -uroot -p123 < bbs.sql
[root@localhost home]# grep root < /etc/passwd
[root@localhost home]# dd if=/dev/zero of=/a.txt bs=1M count=10
#记录了10+0 的读入
#记录了10+0 的写出
1048576字节(10 MB)҅已复制,0.024387 秒,430 MB/秒
[root@localhost home]# dd </dev/zero >/b.txt bs=1M count=10
#记录了10+0 的读入
#记录了10+0 的写出
10485760字节(10 MB)҅已复制,0.0202365 秒,518MB/秒


[root@localhost home]# ll /a.txt
-rw-r--r--. 1 root root 10485760 8์ 13 16:02 /a.txt
[root@localhost home]# ll /b.txt
23>.?任意一个字符
[root@localhost ~]# ls ??.txt
aa.txt
[root@localhost ~]# ls a?c.txt
a1c.txt
[root@localhost ~]# rm -rf *.txt
24.范围中的任意一个字符 [12] [ac] [a-z] [0-9]
[root@localhost ~]# touch a1c a2c axc aXc axd
[root@localhost ~]# ls a?c
a1c a2c axc aXc
[root@localhost ~]# ls a[1x]c
a1c axc
[root@localhost ~]# ls a[a-z]c
axc aXc
[root@localhost ~]# ls a[A-Z]c # ӧړ܄य़ੜٟ
axc aXc
[root@localhost ~]# ls a[x]c
axc
[root@localhost ~]# ls a[X]c
aXc
[root@localhost ~]# ls a[0-9]c
a1c a2c
[root@localhost ~]# ls /dev/sd[a-z]*

七 运行shell程序的两种方式

1、交互式环境
每敲一条立即执行一条
不能永久保存代码
2、把shell命令写入文件中,该文件称之为脚本文件
bash 脚本文件的路径

#运行shell脚本经历的三个阶段
(1)先启动bash解释器
(2)bash解释器会将脚本文件的内容从硬盘读入内存
(3)bash解释器会解释执行刚刚读入内存的代码,识别语法


chmod +x nginx_install.sh
./nginx_install.txt # 开启一个子shell来运行程序

八. Bash SHELL 基础

1.案列:
[root@localhost ~]# vim if.sh
[root@localhost ~]# cat if.sh
#!/usr/bin/env bash
domain="www.baidu.com"
ping -c2 $domain &>/dev/null
if [ $? = 0 ];then
echo "network is ok"
else
echo "network is down!!!"
fi
[root@localhost ~]# chmod +x if.sh
[root@localhost ~]# ./if.sh
network is ok
2.案列:
[root@localhost ~]# vim for.sh
[root@localhost ~]# ll for.sh
-rw-r--r--. 1 root root 61 8์ 13 16:17 for.sh
[root@localhost ~]# . for.sh
3.案列:
[root@localhost ~]# vim for1.sh
[root@localhost ~]# cat for1.sh
#!/bin/bash
for i in {1..5}
do
echo $i
done
[root@localhost ~]# source for1.sh
4.案列:
[root@localhost ~]# vim for2.sh
[root@localhost ~]# cat for2.sh
#!/bin/bash
for i in {1..10}
do
ip=192.168.12.$i
ping -c1 $ip &>/dev/null
if [ $? = 0 ];then
echo "$i
else
echo "$i
fi
done
[root@localhost ~]# vim for2.sh
[root@localhost ~]# source for2.sh
192.168.12.1 is up
192.168.12.2 is down!!!
192.168.12.3 is up
192.168.12.4 is down!!!
......
#完毕!


标签:解释器,shell,echo,Bash,home,txt,root,localhost
From: https://blog.51cto.com/u_15166421/5742173

相关文章

  • ubuntu通过xshell连接更换源
    ubuntu通过xshell连接更换源1、在ubuntu服务器上面运行sudopasswdroot,输入密码,然后suroot可以切换到root用户。2、在windows客户端上面安装xshell,连接上ubuntu服务器。3......
  • shell 企业微信机器人发送消息
    目录shell企业微信机器人发送消息企业微信群创建机器人实例shell企业微信机器人发送消息企业微信群创建机器人创建完机器人后我们会获取到一个webhook,通过curl调用we......
  • 03@shell数据类型及变量值的操作总结
    文章目录​​基本数据类型与值操作​​​​一、数据类型介绍​​​​1、什么是数据​​​​2、编程语言划分(shell的划分)​​​​二、基本数据类型​​​​1、数字​​​​......
  • Jmeter使用beanshell加密,调用AES代码,生成jar包
    工作中需要对接口进行AES加密,找开发要来了加密的代码(如下),记录下具体的使用方法:新建一个AESUtil包,在里面新建一个类(建议类的名字也为AESUtil)。把下面的代码复制进去,注意,......
  • 01- Shell脚本学习--入门
    原文链接:https://github.com/52fhy/shell-book/blob/master/chapter1.md01-Shell脚本学习--入门标签:Shell[TOC]简介Shell是一种脚本语言,那么,就必须有解释器来执行......
  • jmeter BeanShell PostProcessor 获取http请求的入参,存入CSV
    1、在http请求前新建一个jmeterBeanShellPostProcessor,其与http请求同在一个线程组内。  2、下载fastjson-2.0.14.jar包放在jmeter的lib目录下 下载路径为:http......
  • shell获取文件名和文件目录-basename和dirname
    转载学习,from:https://blog.csdn.net/d1240673769/article/details/122072963我们有时候需要获取某个文件路径的文件名或者文件所在目录名,如:/usr/local/nginx/nginx.conf......
  • Linux_Bash_Shell_索引数组和关联数组及稀疏数组
     1. 索引数组 一、什么是索引数组?所谓索引数组就是普通数组,以整数作为数组元素的索引下标。   二、实例。  备注:(a)使用-a选项定义索引数组,使用一对......
  • 官方下载xshell xftp
    免费下载xshell页面    https://www.xshell.com/zh/free-for-home-school/ ......
  • 在java 的基础上增量学习 shell 编程
     shell 脚本其实还是我们比较常用的,在开发中经常会有需求,要写脚本实现某某功能。 比如,别人让写一个告警脚本,将消息推送到钉钉上。 这篇文章作为shell 的入门吧。 jav......