# 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. mysql外键与表查询

    目录 自增特性 外键 外键关系 外键创建 外键的约束效果 级联更新级联删除 多对多关系 一对一关系 表查询关键字 select与from where筛选 group by分组 练习 关系练习 查询练习 ...

  2. 微信小程序使用echarts遇到的问题

    问题1:ec-canvas出现上下滑动页面会漂移 解决方法:在标签内加 force-use-old-canvas="true" 问题2:echarts的tooltip会超出边界 解 ...

  3. 人脸识别库 face_recognition

    face_recognition Windows系统环境下安装 默认环境:anaconda的python3.7版本,win10环境 第一步:安装dlib 从网络上下载: http://dlib.net ...

  4. Fiddler对安卓高版本进行抓包解决方案以及分析 进阶二

    今天是2021年的最后一天了,多分享一些干货吧!看过上一章节教程后会有同学疑惑,我也一步一个脚印的,跟着流程走也设置了代理以及安装了证书,有的同学会发现 为什么手机不能够连接网络了呢?细心一点的同学会 ...

  5. DYOJ 【20220317模拟赛】瞬间移动 题解

    瞬间移动 题意 三维空间中从 \((0,0,0)\) 开始,每次移动 1,问刚好走 \(N\) 次能到 \((X,Y,Z)\) 的方案数 \(N\le10^7\),答案模 \(998244353\) ...

  6. 物联网无线数传通信模块设备常见的几种Modbus网关

    物联网无线数传通信常见的几种Modbus网关 以下提到Modbus网关均指Modbus RTU转Modbus TCP,并不涉及对Modbus ASCII数据帧的处理,Modbus ASCII仅支持透明 ...

  7. ExtJS 布局-Absolute布局(Absolute layout)

    更新记录: 2022年5月31日 发布本篇 1.说明 使用xy配置项设置子组件在父容器中绝对位置,本质是将子组件的CSS的position设置为absolute,然后使用x和y配置项映射到CSS的to ...

  8. 论文解读(GCC)《Efficient Graph Convolution for Joint Node RepresentationLearning and Clustering》

    论文信息 论文标题:Efficient Graph Convolution for Joint Node RepresentationLearning and Clustering论文作者:Chaki ...

  9. web文本划线的极简实现

    开篇 文本划线是目前逐渐流行的一个功能,不管你是小说阅读网站,还是卖教程的的网站,一般都会有记笔记或者评论的功能,传统的做法都是在文章底部加一个评论区,优点是简单,统一,缺点是不方便对文章的某一段或一 ...

  10. JTable和MVC设计模式

    JTable: 用JTable类可以以表格的形式显示和编辑数据 . JTable类的对象并不存储数据,它只是数据的表现 data MVC ~数据,表现和控制三者分离,各负其责 ~M=Model(模型) ...