博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Shell基础
阅读量:6446 次
发布时间:2019-06-23

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

一、概念

shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用来Shell来启动、挂起、停止甚至是编写一些程序。

二、脚本执行方式

1.echo[选项][输出内容]

-e:支持反斜线控制的字符转换/b: 退格键,向左删除键/f:换页键/n: 换行符/r:回车键/t:制表符,与Tab键一样/e: escape键\e[1;与\e[0m]颜色输出eg:#echo -e"\e[1;31m abc \e[0m"输出结果:abc(红色)复制代码

2.第一个脚本

#vi hello.sh

#!/bin/bash 标注是Shell脚本

"$"是获取变量的意思

三、bash基本功能——历史命令与补全

#history【选项】【历史命令保存文件】

选项:-c:清空命令

-w:把缓存中的历史命令写入历史命令保存文件~/.bash_history

历史命令的调用:

  • 使用上、下箭头调用以前的历史命令
  • 使用“!n”重复执行第n条历史命令
  • 使用“!!”重复执行上一条命令
  • 使用“!字串”重复执行最后一条以该字串开头的命令

四、别名与快捷键

1.命令别名:

#alias 别名=‘原命令’

#设定命令别名

#alias

#查询命令别名

  • 别名永久生效#vi /root/.bash rc

五、多命令顺序执行与管道符

;     命1;命2   没有逻辑联系&&     命1&&命2   逻辑与(命1执行,命2才执行),反之。||     命1||命2   逻辑或(命1执行,命2不执行),反之。复制代码
  • #命令 && echo yes || echo no(判断命令是否正确)
  • #命令1||命令2(#命令1的正确输出作为命令2的操作对象)
  • #grep[选项] “搜索内容” 文件名(选项:-i:忽略大小写)(-n:输出行号)(-v:反向直线)(--color=auto:搜索出的关键字用颜色显示)

六、通配符和其他特殊符号

?      匹配一个任意字符*       匹配0个或任意多个字符[]      匹配任意一个字符[abc]或a,或b,或c[-]     “-”代表范围[^]     逻辑非,[^0-9]匹配一个不是数字的字符$       获取变量的命令符号复制代码

单引号括起来的内容,输出还是原内容。 双引号括起来的内容,输出是它的正确值。 \ 转义符 后面的特殊符号失去意义变为普通字符

七、用户自定义变量(当前)

定义:变量是计算机内存的单元,其中存放的值可以改变。变量类型默认是字符串类型。

  • 将变量设为不可更改的命令:readonly
  • 设置环境变量(子shell)
export     变量名=变量值    #申明变量env                       #查询变量unset      变量名         #删除变量复制代码
  • PATH:系统查找命令的途径(#PATH=“$PATH”:/root)PATH变量叠加
  • 位置参数变量
$n(${10}) $*(输出一个整体) $@(区分对待,输出每一个) $#(所有参数的个数)复制代码
  • 预定义变量
$?      最后一次执行的命令的返回状态。“0”为正确$$       当前进程的进程号(PID)$!      后台运行的最后一个进程的进程号(PID)复制代码

八、数值运算与运算符

1、declare声明变量类型

#declare[+|-][选项]变量名-:      给变量设定类型属性+:       取消类型属性-i:     变量声明为整数型(integer)-x:     变量声明为环境声明-p:     显示指定变量的被声明的类型复制代码

加法运算(数值运算方法)

例1:

#declare -i cc =$aa+$bb#echo $cc结果:33复制代码

例2:

#dd=$(expr $aa + $bb)#echo $dd结果:33复制代码

例3:

#ff=$(($aa+$bb))#echo $ff结果:33复制代码

#!/bin/bash

val=`expr 2 + 2'

echo "两数之和为 : $val"

1.表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。

2.完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

eg:

a=10b=20c=`expr ${a} + ${b}`echo "$c"复制代码

优先级:

  • 最大为13.(单目负、单目正),最小为(赋值、运算)
  • 虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级。
  • 逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0.

九、变量测试与内容替换

x=${y-新值}

变量y没有设置(x=新值)

变量y为空值(x为空)

变量y设置值(x=$y)

十、Shell变量

Vi+文件名;touch+文件名;

Shell数组:

定义一个数组:my_array=(A B C D)

输出数组的第一位:echo ${my_array[1]}

获取数组中的所有元素:${my_array[*]}

获取数组的长度:${#my_array[*]}

Shell变量:

1.注意:变量名和等号之间不能有空格。

2.只读变量命令:readonly

3.删除变量命令:unset

Shell字符串:

  • 拼接字符串长度

1.greeting=“hello,“$you_name””

2.greeting_1=“hello,${you_name}”

  • 获取字符串长度

eg:string=“abcde”

echo $string 结果:abcde

echo ${#string} 结果:5

  • 提取子字符串

eg:string=“runoob is a great site”

echo ${string:1:4}

结果:unoo

  • 查找子字符串 eg:string=“runoob is a great company”

echo expr index "$string"is

传递参数:

定义: 向脚本传递参数,脚本内获得参数的格式为:$n,n代表一个数字,1为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推.....

echo“Shell传递参数实例!”;echo“执行的文件名:$0”;echo“第一个参数为:$1”;echo“第二个参数为:$2”;复制代码

为脚本设置可执行权限,并执行脚本:

#chmod  +x  test.sh#./test.sh   1   2  或者  #sh.test.sh结果:Shell传递参数实例!执行的文件名:./text.sh第一个参数为:1第二个参数为:2复制代码

for语句:(一个参数)

for  i  in  “$*”; doecho $idone执行脚本,结果如下:$chmod +x test.sh$./test.sh   1   2   31 2 3复制代码

read命令用于获取键盘输入信息:

#read+选项+变量名

选项:

-p“提示信息”:在等待read输入时,输出提示信息。

-t秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间。

-n字符数:read命令只接受指定的字符数

-s:隐藏输入的数据,适用于机密信息的输入

eg:

read -p “输入第一个参数:”   aread -p “输入第二个参数:”   br=$[a+b]echo  “result=${r}”结果:chmod +x ./test.sh./test.sh输入1输入2result=3复制代码

转载地址:http://zytwo.baihongyu.com/

你可能感兴趣的文章
修改kvm虚拟机的root密码和其他用户密码
查看>>
3.1-find命令详解
查看>>
清算/报表/日终跑批程序之性能优化案例(一)
查看>>
线上svn快速服务器搭建
查看>>
导航栏带子导航菜单并且高亮
查看>>
openstack-12:安装cinder存储服务
查看>>
防火墙的基础知识
查看>>
Java的新项目学成在线笔记-day10(四)
查看>>
链路捆绑; 远程访问;链路备份;不通vlan通信;静态 默认路由综合实验
查看>>
网络管理中配置ip、route 、三次握手,四次挥手
查看>>
我国典型电子垃圾拆解地持久性有毒化学污染物污染现状
查看>>
21. 正则工具简介 下
查看>>
Office 365:如何批量初始化OneDrive for Business?
查看>>
2018年软件外包行业现状分析
查看>>
arm开发板相关内容,arm嵌入式培训学校怎么样?
查看>>
centos directory server
查看>>
马哥第一周
查看>>
Fedora 30的升级方法
查看>>
Oracle技术之如何监测一个PLSQL过程的运行情况(一)
查看>>
为什么大部分人喜欢稳定?
查看>>