博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell脚本基础
阅读量:3968 次
发布时间:2019-05-24

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

shell脚本是一个应用非常广泛的东西。

shell脚本文件的后缀通常为.sh,且写入文件内容最上方为**#!/bin/bash**

你可以在这个.sh文件中写入你想要执行的命令。

使用sh来执行shell脚本文件,如:#你也可以通过文件夹路径直接访问到文件来执行文件

sh hello.sh

赋予脚本root权限:

chmod +x hello.sh

变量

定义一个局部变量,实例:

#!/bin/bashstr="hello world!"echo ${str} !!!!

这里面要注意的是为变量赋值时你在其他c++或python中养成的好习惯比如在变量定义时在等号两边加空格让程序变得更简洁在shell脚本中可能会使脚本运行不起来,所以在编写shell脚本时应该改掉这个习惯。

使用 export 定义一个全局变量也就是环境变量,对Hadoop或python等进行的环境变量配置就是使用export 关键字进行的。

export JAVA_HOME = /usr/local/java/jdk

使用$来查看定义的环境变量

echo $PATH

使用特殊字符进行向shell脚本中进行传参数,相当于在c++中main函数参数的作用欸

$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数
$$ 脚本运行的当前进程的ID
$! 后台运行的最后一个进程的ID
$@ 与$*作用相同,但在使用时加引号,在引号中返回每个参数
$? 显示最后命令的退出状态,0表示没有错误,其他任何值表示有错误。

实例:

脚本文件:test.sh

#!/bin/bashecho "第一个参数为 $1"echo "参数个数为 $#"echo "传递的参数作为一个字符串显示 $*"

执行时传递参数:

sh test.sh aaa bbb ccc

stdout:

第一个参数为 aaa参数个数为 3传递的参数作为一个字符串显示 aaa bbb ccc

运算符

实例:

#!/bin/basha=1;b=2;echo `expr $a + $b`;echo $((a+b));echo $[a+b];

你在使用的时候要注意的是,在使用expr进行运算计算的时候,使用的运算符两边一定要用空格隔起来,而且在使用乘除/运算符的时候呢要在运算符的前面加上转义符反斜杠(、的英文输入),而反观下面的两种用法则无这些限制。*

if语句分支

实例:

#!/bin/bashread -p "please input your name:" NAME;if [$NAME = root]        then                echo "hello ${NAME} welcome !"        elif [$NMAE = itcast]        then                echo "hello ${NAME} welcome !"        else                echo "get out now!"fi

需要注意到的是条件判断使用方括号,且相等的判断不是双等号而是一个等号,且每一个条件判断if之后会有then来代表开始执行其他语句,if语句使用fi结尾。

for语句

实例:

for N in 1 2 3do	echo $Ndone
for ((i = 0;i<5;i++))do	echo $idone

没啥好说的,看着for吧。

函数:

对于一个函数呢,shell中的函数比较简便,无形参,直接加一个大括号定义一个函数,使用函数返回值直接使用 $? 调用返回结果。

直接看实例:

funwithreturn() {
a=1b=2return $(($a+$b))}funwithreturnecho "函数的返回值为 $? !"

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

你可能感兴趣的文章
C++小知识点
查看>>
【转载】zedboard中PL_GPIO控制(8个sw、8个leds)
查看>>
zedboard烧写程序到FLASH,用于QSPI Flash启动
查看>>
软件工程师,你必须知道的20个常识
查看>>
常用STL算法2_查找
查看>>
常用STL算法3_排序
查看>>
常用STL算法4_拷贝和替换
查看>>
STL综合案例
查看>>
O(logn)时间复杂度求Fibonacci数列
查看>>
【转】腾讯十年运维老兵:运维团队的五个“杀手锏”
查看>>
Iterator_traits
查看>>
Zedboard中的SPI通信记录文档(已实现)
查看>>
Android 发布到google Play的app搜索不到问题的解决
查看>>
Flutter 网络请求之基于dio的简单封装
查看>>
Flutter UI基础 - 路由之Navigator详解
查看>>
Flutter UI基础 - Widgets 之 InkWell 和 Ink
查看>>
Spring - sentinel和hystrix比较
查看>>
Flutter 日期插件date_format 中文 国际化 及flutter_cupertino_date_picker
查看>>
Flutter 插件笔记 | 屏幕适配 flutter_screenutil
查看>>
Flutter UI基础 - 侧拉抽屉菜单
查看>>