shell编程基础

一、shell入门

1.shell是什么: shell是一个命令行注释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至是编写一些程序(可以写一个脚本或是一个指令)

2.shell脚本的执行方式:

(1)脚本的格式要求:

[1] 脚本要以#!/bin/bash开头(我们以bash shell)

[2] 脚本需要有可执行权限

(2)常用执行方式:

方式1(输入脚本的绝对路径(/root/shellcode/hello.sh)或相对路径(./hello.sh))

说明:首先要辅以 脚本名.sh 脚本的 +x权限,再执行脚本(chmod u+x 脚本名.sh)

方式2(sh+脚本)

说明:不用赋予脚本+x权限,直接执行即可。

二、shell的变量

1.shell变量介绍

(1)Linux shell中的变量分为,系统变量(Linux系统本身就设置好的)和用户自定义变量

(2)系统变量:$HOME,$PWD,$SHELL,$USER等等 可以echo $HOME 来查看shell系统变量

(3)显示当前shell中所有变量:set

2.shell变量的定义

基本语法

(1)定义变量:

[1]variable=value(不要用空格)

[2]variable='value' (单引号:里面有什么就输出什么)

[3]variable="value"(双引号:输出时先解析里面的变量和命令,而不是原样输出)

[4]数字可以不加引号,想要原样输出就加单引号,其他没有特别要求的字符串加上双引号

(2)撤销变量:unset 变量

(3)声明静态变量:readonly变量,注意:不能unset

(4)变量在输出的时候,前面要加$表示它是变量否则会被当成普通文本处理,如果想输出$可以'$'

(5)定义变量的规则:[1]变量名称可以由字母、数字和下划线组成,但是不能以数字开头 [2]等号两侧不能有空格 [3]变量名称一般习惯大写,小写也可以

(6)将命令的返回值赋给变量 使用反引号``(tab上面的)或者是$()

eg:A=date或者是$(date),运行里面的命令,并把结果返回给变量A 即把时间赋给变量A 推荐使用$()

(7)${}括起来相当于说明括起来的部分是变量

3.设置环境变量

(1)基本语法:

[1]export 变量名=变量值(将shell变量输出为环境变量/全局变量,允许多个文件共享)

[2]source 配置文件(让修改的配置信息立即生效)

[3]echo $变量名(查询环境变量的值)

(2)注意:在输出环境变量前,需要让其生效 source 文件名

(3)在vim进入后 :+set nu 可以显示行数

(4)shell里的整行注释,:<<!回车 要注释的内容 回车 !

4.位置参数变量

当我们执行一个shell脚本时,如果希望能获取命令行的参数信息,可以使用位置参数变量(类似于c传参)

基本语法:

(1)$n(n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10})

(2)$*(这个变量代表命令行所有的参数,把所有的参数看成一个整体)

(3)$@(这个变量也代表所有的参数,不过把每个参数区分对待)

(4)$#(这个变量代表命令行中所有参数的个数)

5.预定义变量

shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

基本语法:

(1)$$(当前进程的进程号(PID))

(2)$!(后台运行的最后一个进程的进程号(PID))

(3)$?(最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体那个数,由命令自己来决定),则证明上一个命令执行不正确了)

三、shell运算符

1.基本语法:

(1)$((运算式))

(2)$[运算式]

(3)expr m + n(注意expr运算符之间要有空格即:m、n要有空格、如果希望将expr的结果赋予某个变量,使用反引号``包起来,expr中乘法为\ *)

四、条件判断

1.基本用法:

(1)if [ condition ](注意condition前后都要有空格,及时什么也没有也要有一个空格 即:[ ])

#非空返回true,可使用$?验证(0为true,>1为false)

eg:[ boy ] 返回true [ ] 返回false

then (满足条件的语句)

fi (表示if结束)

2.判断语句:

(1)字符串比较:= [ "OK"="OK" ]

(2)两个整数的比较:[1] -lt 小于 [2] -le 小于等于 [3] -eq 等于 [4] -gt 大于 [5] -ge 大于等于 [6] -ne 不等于 [ 数1 -xx 数2 ]

(3)按照文件权限进行判断:[1] -r 有读的权限[2] -w 有写的权限 [3] -x 有执行的权限

(4)按照文件类型进行判断:[1] -f 文件存在并且是一个常规文件[2] -e 文件存在 [3] -d文件存在并是一个目录 [ -x /root/shcode/aaa.txt]

3.流程控制

(1)单分支:

if [ 条件判断式 ]

then

代码

fi

(2)多分支:

if [ 条件判断式 ]

then

代码

elif [ 条件判断式 ]

then

代码

...(若干个elif)

fi

4.case语句

case $变量名 idn

”值1“)

如果变量的值等于值1,则执行程序1

;;

”值2“)

如果变量的值等于值2,则执行程序2

;;

...省略其他分支...

*)

如果变量的值都不是以上的值,则执行此程序

;;

esac

五、循环控制

1.for循环

(1)基本语法1:

for 变量 in 值1 值2 值3... (变量在in后面的值里都可以循环)

do

程序/要处理的代码/要做的事情

done

(2)基本语法2:

for((变量初始值;循环控制条件;变量变化))

do

程序/要处理的代码/要做的事情

done

2.while循环

(1)基本语法1

while [ 条件判断式 ] (while和[]有空格,条件判断式和[]也有空格)

do

程序/要处理的代码/要做的事情

done

(2)while不能自加,并且变量i要提前定义 即:要先定义i=0 然后i=$[$i+1]

六、read读取控制台输入

与控制台交互,希望用户能够动态的输入一些数据到程序

1.基本语法

read(选项)(参数)

选项:

[1] -p:指定读取值时的提示符(”请输入“)

[2] -t:指定读取值时的等待时间(秒),如果没有在指定的时间内输入,就不再等了

参数:

[1]变量:指定读取值的变量名 变量前要加空格!!

七、函数

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。

1.系统函数(介绍2个)

(1)basename函数

[1]功能:返回完整路径最后一个/后的部分,常用于获取文件名

[2]语法:basename [pathname] [suffix]

即:basename[string] [suffix]

(功能描述:basename命令会删掉所有的前缀包括最后一个(’/‘)字符,然后讲字符串显示出来)

选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉 eg:.txt

suffix不写也行

(2)dirname函数

[1]功能:返回完整路径最后一个/前面的部分,常用于返回路径部分

[2]语法:dirname [文件绝对路径] (功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))

2.自定义函数

(1)基本语法:

function funname()

{

Action;//要干什么事情

[return int] //写返回值

}

调用直接写函数名:funname 值

(2)使用:先定义函数,再用。 函数中的变量有两种,[1]全局变量,函数中的变量和函数外面read输入的变量是同一个 [2]$1、$2这种位置参数,但是需要在调用函数时在函数名后面加上 read进来的变量,而全局变量可以不加直接写函数名 法2相当于传参 [3]在sh 名字.sh 后加的数字是向脚本中传参,跟函数无关

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值