热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Shell编程必备简明基础知识

在Linux下进行开发,对于一些繁杂的、需要重复性进行的工作,我们都有必要写一些shell脚本来完成这些繁杂的工作。本篇笔记围绕如下内容做分享

在Linux下进行开发,对于一些繁杂的、需要重复性进行的工作,我们都有必要写一些shell脚本来完成这些繁杂的工作。

本篇笔记围绕如下内容做分享:

hello shell

最简单的shell脚本:

#!/bin/bash
echo "hello shell" # 这是注释

#! 是一个约定标记,指定这个脚本使用哪个shell解释器执行。这里指明使用bash解释器,这也是最常用的shell解释器。

常见的shell解释器还有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)

  • C Shell(/usr/bin/csh)

  • K Shell(/usr/bin/ksh)

echo就是打印输出命令:

单行注释:使用符号 #

多行注释:

:<注释内容...
注释内容...
注释内容...
!

 变量

#!/bin/bash# 定义变量
name&#61;"LinuxZn"
num&#61;66#使用变量
echo "My name is ${name}, num is ${num}"

注意&#xff1a;&#61;号两边不能有空格&#xff01;&#xff01;&#xff01;

数组 

#!/bin/bash
# 定义数组
array&#61;(0 1 2 3) # 方式一
array&#61;( # 方式二
0
1
2
3
)array[0]&#61;0 # 方式三
array[1]&#61;1
array[2]&#61;2
array[3]&#61;3# 访问数组中的索引为3的元素
echo "array[0]: ${array[3]}"# 访问数组所有元素
echo "all elements: ${array[&#64;]}"# 获取数组长度
echo "array len: ${#array[&#64;]}" # 方式一
echo "array len: ${#array[*]}" # 方式二

输入输出 

#!/bin/bash
read -p "input a num:" num # 获取键盘输入的数字给到变量 num
echo "num &#61; ${num}"
read -p "input a string:" str # 获取键盘输入的数字给到变量 str
echo "str &#61; ${str}"

2、输出测试&#xff1a;

        前面我们都是使用echo来输出信息。其实也可以用printf来输出&#xff0c;printf的使用与C语言中的printf类似。

#!/bin/bash# 定义变量
name&#61;"LinuxZn"
num&#61;66#使用变量
echo "My name is ${name}, num is ${num}"
printf "My name is %s, num is %d\n" ${name} ${num}

流程控制 

1、if判断

#!/bin/basha&#61;1
b&#61;2if [ ${a} &#61;&#61; ${b} ]
thenprintf "a &#61;&#61; b\n"
elif [ ${a} -lt ${b} ]
then printf "a elseprintf "a > b\n"
fi

 注意&#xff1a;这里的if判断&#xff0c;需要严格输入空格。if、中括号 [] 与其中间的代码 应该有空格隔开 &#xff01;&#xff01;&#xff01;

2、for循环

#!/bin/bash# 循环输出数字
for i in 1 2 3 4 5 6
doecho "i &#61; ${i}"
done# 循环输出字符串
for str in aaa bbb ccc ddd eee fff
doecho "str &#61; ${str}"
done

3、case 

#!/bin/bashread -p "input a num(1~3):" num
case ${num} in1) printf "num &#61; 1\n";;2) printf "num &#61; 2\n";;3) printf "num &#61; 3\n";;*) printf "error\n";;
esac

操作命令 

可以在shell脚本中输入命令&#xff0c;如输入ls命令&#xff1a;

#!/bin/bash# 方式一&#xff1a;使用()
echo "方式一&#xff1a;使用()"
for file in $(ls /home)
doecho ${file}
done# 方式二&#xff1a;使用&#96;&#96;
echo "方式二&#xff1a;使用\&#96;\&#96;"
for file in &#96;ls /home&#96;
doecho ${file}
done

注意&#xff1a;&#96;&#96;符号不是单引号&#xff01;&#xff01;&#xff01;是键盘Esc下方的按键。

基本运算符 

1、算数运算符

#!/bin/bash# expr 是一款表达式计算工具a&#61;1
b&#61;2# 加
res&#61;&#96;expr ${a} &#43; ${b}&#96; # 符号两边的空格不能省
echo "a &#43; b : ${res}"# 减
res&#61;&#96;expr ${a} - ${b}&#96;
echo "a - b : ${res}"# 乘
res&#61;&#96;expr ${a} \* ${b}&#96; # 乘号要转义\*
echo "a * b : ${res}"# 除
res&#61;&#96;expr ${b} / ${a}&#96;
echo "b / a : ${res}"# 取余
res&#61;&#96;expr ${b} % ${a}&#96;
echo "b % a : ${res}"# 等于
if [ ${a} &#61;&#61; ${b} ] # 注意空格&#xff01;&#xff01;
thenecho "a &#61;&#61; b"
fi# 不等于
if [ ${a} !&#61; ${b} ]
thenecho "a !&#61; b"
fi

2、关系运算符 

#!/bin/bash# -eq&#xff1a;等于。EQUAL的缩写。
# -ne&#xff1a;不等于。NOT EQUAL的缩写。
# -gt&#xff1a;大于。GREATER THAN的缩写。
# -lt&#xff1a;小于。LESS THAN的缩写
# -ge&#xff1a;大于等于。GREATER THAN OR EQUAL的缩写。
# -le&#xff1a;小于等于。LESS THAN OR EQUAL的缩写。a&#61;1
b&#61;2# 等于
if [ ${a} -eq ${b} ] # 注意空格。
thenecho "a 等于 b"
fi# 不等于
if [ ${a} -ne ${b} ]
thenecho "a 不等于 b"
fi# 大于
if [ ${a} -gt ${b} ]
thenecho "a 大于 b"
fi# 小于
if [ ${a} -lt ${b} ]
thenecho "a 小于 b"
fi# 大于等于
if [ ${a} -ge ${b} ]
thenecho "a 大于等于 b"
fi# 小于等于
if [ ${a} -le ${b} ]
thenecho "a 小于等于 b"
fi

3、逻辑运算符 

#!/bin/basha&#61;1 # 等号两边不能有空格
b&#61;2# 逻辑与
if [[ ${a} -lt 6 && ${b} -gt 6 ]] # 注意&#xff1a;1、使用[[]] 2、注意空格
thenecho "true"
elseecho "false"
fi# 逻辑或
if [[ ${a} -lt 6 || ${b} -gt 6 ]]
thenecho "true"
elseecho "false"
fi

4、字符串运算符 

#!/bin/basha&#61;"abc"
b&#61;"xyz"# 字符串相等判断
if [ ${a} &#61; ${b} ]
thenecho "a 等于 b"
fi# 字符串不相等判断
if [ ${a} !&#61; ${b} ]
thenecho "a 不等于 b"
fi# 字符串长度是否为0
if [ -z ${a} ]
thenecho "字符串 ${a} 长度为 0"
fi# 字符串长度是否为0
if [ -n "${a}" ]
thenecho "字符串 ${a} 长度不为 0"
fi# 字符串是否为空
if [ $a ]
thenecho "字符串 ${a} 不为空"
fi

参数传递 

#!/bin/bashecho "输入参数的个数: $#"if [ $# !&#61; 2 ]
thenecho "输入参数的个数不为2&#xff0c;请重新输入"
elseecho "第 1 个参数&#xff1a;$1";echo "第 2 个参数&#xff1a;$2";
fi

函数 

1、无输入参数、无返回值

#!/bin/bash# 函数定义
hello_func()
{printf "hello func\n"
}# 函数调用
hello_func

2、无输入参数、有返回值 

#!/bin/bash# 函数定义
add()
{read -p "input a num: " num1read -p "input a num: " num2sum&#61;&#96;expr ${num1} &#43; ${num2}&#96; # &#96;&#96;符号在键盘Esc键的下方return ${sum}
}# 函数调用
add
echo "sum&#61;$?" # 函数返回值在调用该函数后通过 $? 来获得

函数返回值在调用该函数后通过 $? 来获得


3、有输入参数、有返回值

#!/bin/bash# 函数定义
add()
{echo "第 1 个参数&#xff1a;$1";echo "第 2 个参数&#xff1a;$2";sum&#61;&#96;expr $1 &#43; $2&#96;return ${sum}
}# 函数调用
add 3 4
echo "sum&#61;$?" # 函数返回值在调用该函数后通过 $? 来获得

 

shell输入参数会影响到函数输入参数吗&#xff1f;不会&#xff1a;

 

文件相关判断 

#!/bin/bash# -e filename 如果 filename存在&#xff0c;则为真
# -d filename 如果 filename为目录&#xff0c;则为真
# -f filename 如果 filename为常规文件&#xff0c;则为真
# -L filename 如果 filename为符号链接&#xff0c;则为真
# -r filename 如果 filename可读&#xff0c;则为真
# -w filename 如果 filename可写&#xff0c;则为真
# -x filename 如果 filename可执行&#xff0c;则为真
# -s filename 如果文件长度不为0&#xff0c;则为真
# -h filename 如果文件是软链接&#xff0c;则为真file&#61;"hello.txt"if [ -e ${file} ]
thenecho "文件存在"
elseecho "文件不存在&#xff0c;创建文件"$(touch ${file})if [ -r ${file} ]thenecho "文件可读"elseecho "文件不可读"fiif [ -w ${file} ]thenecho "文件可写"elseecho "文件不可写"fiif [ -x ${file} ]thenecho "文件可执行"elseecho "文件不可执行"fi
fi

 


推荐阅读
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文总结了Linux下多线程执行shell脚本的4种方法,包括切换到工作目录执行、使用绝对路径执行、直接使用bash或sh执行。同时介绍了为什么需要加上"./"来执行脚本的原因。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • Python中的PyInputPlus模块原文:https ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
author-avatar
Huibin_Yu_421
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有