博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux shell
阅读量:5306 次
发布时间:2019-06-14

本文共 4634 字,大约阅读时间需要 15 分钟。

shell脚本

sed和awk命令

shell脚本概述:

  我们所输入的命令计算机是不识别的,这时就需要一种程序帮助我们进行翻译,变成计算机所识别的二进制程序,同时又将计算机所执行的结果翻译给我们,这个就是shell

  linux的shell脚本是一种特殊的应用程序,常见的shell解释器有很多种使用不同的shell时期内部指令命令提示方式方面会存在一些区别,可以通过/etc/shells文件查看

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

 

/bin/bash是大多数Linux中默认的shell解释器,之后的所有脚本编写都是bash脚本

我们可以添加别的shells 比如zsh

[root@zq ~]# rpm -ivh /mnt/Packages/zsh-5.0.2-14.el7.x86_64.rpm 警告:/mnt/Packages/zsh-5.0.2-14.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51: NOKEY准备中...                          ################################# [100%]正在升级/安装...   1:zsh-5.0.2-14.el7                 ################################# [100%][root@zq ~]# cat /etc/shells /bin/sh/bin/bash/sbin/nologin/usr/bin/sh/usr/bin/bash/usr/sbin/nologin/bin/tcsh/bin/csh/bin/zsh     多了一个zsh[root@zq ~]# zsh    运行zshell[root@zq]~# cd /etc/sysctl.d   显示绝对路径[root@zq]/etc/sysctl.d# exit   退出回到bash

 编写一个shell脚本

以.sh后缀名   

通常linux不以后缀名区分文件,为了方便记忆这里我们就以.sh结尾

vim first.sh

#!/bin/bash     指定通过哪种shell执行# This is my first shell-script  描述你写的shell功能  注释不生效mkdir /root/shell  创建 root下 shell目录ifconfig  查看 总结一下:   当写一个比较大的脚本时,如果没有一个好的注释,其他人很难明白其中的意思,执行用的时候有困难

写完之后要给这个脚本加权限

chmod u+x first.sh  

./first.sh  执行

[root@zq ~]# ll /root/first.sh -rw-r--r-- 1 root root 71 5月   8 21:26 /root/first.sh[root@zq ~]# chmod u+x first.sh [root@zq ~]# ./first.sh eno16777736: flags=4099
mtu 1500 inet 192.168.1.63 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fedf:de30 prefixlen 64 scopeid 0x20
ether 00:0c:29:df:de:30 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0lo: flags=73
mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 0 (Local Loopback) RX packets 4 bytes 304 (304.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4 bytes 304 (304.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0virbr0: flags=4099
mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:6e:7f:7d txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@zq ~]# ls /root/anaconda-ks.cfg  first.sh  initial-setup-ks.cfg  shell
 

执行脚本的不同方式

第一种使用绝对路径执行

第二种使用相对路径执行,eg:./方式

第三种使用sh命令执行  格式:sh/路径/脚本文件名.sh  不需要执行权限

第四种 bash命令来执行  格式:同上

 

变量:

定义:可以存放一个可变的值的空间

常见的shell变量:自定义变量,环境变量,位置变量,预定义变量

一般使用echo 输出变量 变量名的格式=$变量名

自定义变量:

  . 用户根据自己的环境自己定义变量

  . bash中比较简单的变量,不用进行提前声明,而是直接指定变量名称并赋给初始值

  . 定义变量的基本格式为变量名=变量值等号两边不允许出现空格

  . 变量名称只能以字母和下划线开头名称中不能包含特殊字符

    eg:定义一个变量名为zq值为5 的变量和Zq值为4

[root@zq ~]# zq=5[root@zq ~]# echo $zq5[root@zq ~]# Zq=4[root@zq ~]# echo $Zq4

直接在命令行定义,以上就是定义一个变量并赋值,通过echo进行输出变量,$是引用变量的特殊字符(必须使用¥符号)

echo 和调用的变量之间必须用空格隔开

两个可以一起调用

[root@zq ~]# echo $zq $Zq5 4

当变量名和后面的字符容易混淆的时候应该用{}将变量名括起来

[root@zq ~]# echo $zqsystem   不可以[root@zq ~]# echo {$zq}system   不正确  大括号的位置不对{
5}system[root@zq ~]# echo ${zq}system 正确,大括号必须把变量名单独括起来5system

read命令

除了上面的赋值之外还可以使用read命令进行赋值,read命令用来提示用户输入信息,从而实现简单的交互式过程(其实我们所输入的命令就是一种交互式的过程)

执行时需要从标准输入设备键盘读取一行,并以空格为分隔符

比如我们同时定义两个变量操作如下

[root@zq ~]# read zz qq56                          用户输入变量值   一定要隔开[root@zq ~]# echo $zz $qq56[root@zq ~]# echo $zz56[root@zq ~]# echo $qq                          从这就可以看出问题[root@zq ~]# read zz qq 5 6[root@zq ~]# echo $zz $qq5 6[root@zq ~]# echo $zz5[root@zq ~]# echo $qq6                                               这是正确的显示效果

为了交互式更加的形象,提高易用性,加上-p选项来设置提示信息

[root@zq ~]# read -p "input your passwd:" passwdinput your passwd:123456[root@zq ~]# echo $passwd123456

数值变量的运算:(这不是shell的强项)

shell脚本的数值运算多用于脚本程序的过程控制(如循环次数,使用量比较等)

在shell环境中,只能进行比较简单的整数运算

运算符与变量之间必须有一个空格位,整数的运算主要是通过内部命令expr 命令进行运算

格式:   变量1 运算符 变量2

+-*/   取余%

[root@zq ~]# a=10[root@zq ~]# b=20[root@zq ~]# expr $a + $b30[root@zq ~]# expr $a+$b  没有空格显示的结果10+20[root@zq ~]# expr $a+ $b  expr: 语法错误[root@zq ~]# expr $a + $b30[root@zq ~]# expr $a +$bexpr: 语法错误[root@zq ~]# expr $a * $bexpr: 语法错误[root@zq ~]# expr $a \* $b  shell里面的乘法运算 我也是醉了(学python的悠着点儿这块儿)200[root@zq ~]# expr $a / $b   非整除0显示0[root@zq ~]# expr $a % $b10

若要将运算结果赋值给其他变量可以这么做

[root@zq ~]# ab=$(expr $a + $b)[root@zq ~]# echo $ab30

 

转载于:https://www.cnblogs.com/zq6041/p/6828250.html

你可能感兴趣的文章
研磨JavaScript系列(五):奇妙的对象
查看>>
面试题2
查看>>
selenium+java iframe定位
查看>>
P2P综述
查看>>
第五章 如何使用Burp Target
查看>>
Sprint阶段测试评分总结
查看>>
sqlite3经常使用命令&语法
查看>>
linux下编译openjdk8
查看>>
【python】--迭代器生成器装饰器
查看>>
Pow(x, n)
查看>>
安卓当中的线程和每秒刷一次
查看>>
每日一库:Modernizr.js,es5-shim.js,es5-safe.js
查看>>
ajax连接服务器框架
查看>>
wpf样式绑定 行为绑定 事件关联 路由事件实例
查看>>
利用maven管理项目之POM文件配置
查看>>
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>