# shell脚本
# 如何运行shell脚本
sh test.sh
source test.sh
./test.sh # 需要有执行权限
# source和其他两种的区别是。source不会开新进程去执行脚本。
# 所以如果在主进程中定义的变量脚本中要用的话,就需要用export关键字去定义变量。
# export定义的变量,子进程可以访问。 # 首行必须是"#! /bin/bash" 意思是你写的脚本将用哪个解释器去执行它 # 变量
name="zhang san" # 定义字符串变量。
name1=zhangsan # 这也是,没有单引号或者双引号中间不允许有空格
name2='zhang san' # 这也是
name3="test $name" # 双引号会自动将变量值替换,而单引号不会替换
echo $name # 输出变量
echo ${name1} # 也是输出变量
readonly name # 将变量设置为只读。也就是后面不允许对该变量再次赋值
unset name1 # 删除变量。只读变脸不可删除
echo ${#name} # 获取变量长度
# 数组
names=("a" "b" "c") # 定义数组
echo ${names[0]} # 访问数组元素
echo ${names[@]} # 输出数组所有元素
echo ${#names[@]} # 获取数组长度
# 注释:"#"号开头单行注释 # shell 传参数
echo "执行shell脚本的文件名:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
# "$#":传递参数的个数
# "$*":以一个单字符串显示所有向脚本传递的参数
# "$$":脚本运行的当前进程id号
# "$!":后台运行的最后一个进程的ID号
# "$?" 显示最后命令的退出状态。0标识没有错误,其他标识有错误 # 关系运算符
# 等号: -eq
# 不等号: -ne
# 大于: -gt
# 小于: -lt
# 大于等于: -ge
# 小于等于: -le
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b : a 不等于 b"
fi # 布尔运算符
# != ==
if [ $a == $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b : a 不等于 b"
fi
# 逻辑运算
# && ||
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回:True"
else
echo "返回:False"
fi # 字符串运算符
# = != -z(字符串长度为0) -n (字符串长度不为0)
a='abc'
b='abc'
if [ $a = $b ]
then
echo "相等"
else
echo "不相等"
fi if [ $a ]
then
echo "不为空"
else
echo "为空"
fi if [ -n $a ]
then
echo "长度不为0"
else
echo "长度为0"
fi # 文件测试运算符
# -r(是否可读,文件不存在的时候返回False) -w(是否可写) -x(是否可执行) -f(是否为普通文件) -d(是否为目录) -s(文件不为空,返回True) -e(文件是否存在)
file="/home/pc1/odoo-conf/test1.sh"
if [ -r $file ]
then
echo "文件可读"
else
echo "文件不可读"
fi # "``"
echo `pwd` # 这里并不会直接显示pwd,而是将pwd当做命令执行,然后返回结果显示
echo -e "\nhello\" \c" # "\"转义 \n换行 \c不换行 -e不换行 # test 与正常比,少了个中括号
if test ${a} -eq ${b}
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b : a 不等于 b"
fi # if语句
if test ${a} -eq ${b}
then
echo "$a -eq $b : a 等于 b"
elif ${a} -ne ${b}
echo "$a -eq $b : a 不等于 b" fi # case分支
echo '输入1到4之间的数字:'
echo '你输入的数字为:'
read num
case $num in
1) echo '你选择了 1'
;;
2) echo '你选择了 2'
;;
3) echo '你选择了 3'
;;
4) echo '你选择了 4'
;;
*) echo "你选择了 * $num"
;;
esac # for循环分支
names=(1 2 3 4 5)
for loop in ${names[@]}
do
echo $loop
done # while循环
while :
do
echo -n "输入1到5的数字,6退出:"
read anum
case $anum in
1|2|3|4|5) echo "你输入的为: $anum"
;;
6) echo "退出"
break
;;
*) echo "输入错误!"
continue
;;
esac
done # 字符串不为空
a=''
if [ ! $a ]
then
echo "字符串为空的时候执行这里"
fi # 多条件判断 || &&
echo "是否确认本次操作(Y/N)?:"
read ch
if [ $ch == "Y" ] || [ $ch == 'y' ]
then
echo "你选择了确认"
fi # 函数
funwithParam(){
echo "第一个参数 $1"
echo "第二个参数 $2"
echo "第三个参数 $3"
echo "第四个参数 $4"
echo "第五个参数 $5"
echo "第六个参数 $6"
return $(($1+$2))
}
funwithParam 1 2 3 4 5 6 # 调用函数
echo "第一个参数与第二个参数的和:$?" # $?上次返回值

Shell 编程基础语法的更多相关文章

  1. shell编程基础语法

    创建文件:touch aaa.sh 把文件变成可执行的命令: chmod +x /Users/dream-mac/Desktop/aaa.sh (这里是文件路径,如果在当前路径下,只需要把文件名写到这 ...

  2. Shell 编程基础 --语法高速入门

    简单的说shell就是一个包括若干行Shell或者Linux命令的文件.对于一次编写,多次使用的大量命令,就能够使用单独的文件保存下来,以便日后使用.通常shell脚本以.sh为后缀.第一行一定要指明 ...

  3. 【转】Shell编程基础篇-下

    [转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...

  4. 【转】Shell编程基础篇-上

    [转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...

  5. shell编程基础(转载)

    Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...

  6. 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!

    http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...

  7. 6-2 shell编程基础

    shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...

  8. Linux学习之二十一-shell编程基础

    Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...

  9. 7-1 shell编程基础之二

    shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...

随机推荐

  1. 69. Sqrt(x) - LeetCode

    Question 69. Sqrt(x) Solution 题目大意: 求一个数的平方根 思路: 二分查找 Python实现: def sqrt(x): l = 0 r = x + 1 while l ...

  2. CentOS下安装与配置Maven

    安装Maven 当前系统 [root@141 ~]# cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) 下载 http://ma ...

  3. TornadoFx设置保存功能((config和preference使用))

    原文地址:TornadoFx设置保存功能(config和preference使用) 相信大部分的桌面软件都是存在一个设置的界面,允许用户进行设置的修改,此修改之后需要保存的本地,若是让开发者自己实现, ...

  4. 碎碎念软件研发02:敏捷之Scrum

    一.什么是 Scrum 1.1 Scrum 定义 Scrum 是敏捷开发方法之一,它使用比较广泛. 敏捷的其它开发方法还有 XP(极限编程).FDD(特性驱动开发).Crystal(水晶方法).TDD ...

  5. Linux如何安装JDK1.8版本详细步骤

    Linux如何安装JDK1.8版本详细步骤 1.下载JDK1.8版本压缩包 进入官网:https://www.oracle.com/java/technologies/downloads/ 2.将压缩 ...

  6. VMware Workstation 虚拟机详细安装教程

    一.介绍篇 VMware Workstation 16 Pro是VMware(威睿公司)于2021年最新发布的一代虚拟机软件,软件的中文名是"VMware 工作站 16 专业版". ...

  7. 【Spring】AOP实现原理(一):AOP基础知识

    AOP相关概念 在学习AOP实现原理之前,先了解下AOP相关基础知识. AOP面向切面编程,它可以通过预编译方式或者基于动态代理对我们编写的代码进行拦截(也叫增强处理),在方法执行前后可以做一些操作, ...

  8. 记录人生中的第一个bug

    对象的引用 使用**只是拷贝了字典的最外层,加个deepcopy可以实现深拷贝,递归的去复制对象 bug来源: 在一次将数据库里的数据转成json格式过程中,在遍历数据库对象时,对象的引用不当,导致最 ...

  9. spring boot用ide新建项目遇到的restcontroller不能导入的问题

    才开始学习spring boot,第一个程序helloworld就碰到@RestController和@RequestMapping(/hello)的注解都会报错的问题. 我个人的解决方法: 1.sp ...

  10. Vue数据双向绑定原理(vue2向vue3的过渡)

    众所周知,Vue的两大重要概念: 数据驱动 组件系统 1 2 接下来我们浅析数据双向绑定的原理 一.vue2 1.认识defineProperty vue2中的双向绑定是基于definePropert ...