Shell 编程基础语法
# 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 编程基础语法的更多相关文章
- shell编程基础语法
创建文件:touch aaa.sh 把文件变成可执行的命令: chmod +x /Users/dream-mac/Desktop/aaa.sh (这里是文件路径,如果在当前路径下,只需要把文件名写到这 ...
- Shell 编程基础 --语法高速入门
简单的说shell就是一个包括若干行Shell或者Linux命令的文件.对于一次编写,多次使用的大量命令,就能够使用单独的文件保存下来,以便日后使用.通常shell脚本以.sh为后缀.第一行一定要指明 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
- 【Shell 编程基础第二部分】Shell里的流程控制、Shell里的函数及脚本调试方法!
http://blog.csdn.net/xiaominghimi/article/details/7603003 本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区 ...
- 6-2 shell编程基础
shell编程基础 编程基础 Linus:Talk is cheap, show me the code 程序和编程风格 程序: 程序:算法+数据结构 数据:是程序的核心 算法:处理数据的方式 数据结 ...
- Linux学习之二十一-shell编程基础
Shell编程基础 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.Shell 是指一种应用程序,这个应用程序提供了一个 ...
- 7-1 shell编程基础之二
shell编程基础之二 算数运算 bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方),乘法符号有些场景中需要转义 实现算术运算: (1) let var=算 ...
随机推荐
- 【算法】希尔排序(Shell Sort)(四)
希尔排序(Shell Sort) 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版.它与插入排序的不同之处在于,它会优先比较距离较远的元素.希尔排序又叫缩小增量排序. ...
- unity---2d游戏杂记
2d游戏制作的笔记 save Layout 增加配置 Packges文件夹 插件 调整视野 鼠标中键 拉近拉远 鼠标右键 平移 Alt+鼠标左键 移动视角 Pivot/Center 当前物体中心和多个 ...
- 免申请直接用上 IDEA 新 UI,只需要这三步配置
早上给大家介绍了IDEA官方宣布正在开发一套全新的UI,但目前是预览版需要申请才能体验. 随后马上就有网友分享了,不需要申请直接就能激活体验的方法. 本期视频:https://www.bilibili ...
- syc-day2
第1题:mod注意负数. 第2题:dp 第3题:构造(奇偶性) 第4题:线段树
- 第一次的ssm整合
数据库表 导入依赖 <dependencies> <dependency> <groupId>javax.servlet</groupId> <a ...
- 卸载windows安装ubuntu的完全指南
卸载windows安装ubuntu的完全指南 新配置了一台深度学习服务器,但是预装系统为windows10,与需求不符.于是,自己动手安装ubuntu(18.04).此文为过程记录. 主要步骤: 准备 ...
- 大数据分析VMWare虚拟机centos系统下配置网络参数
最近搞大数据方面的数据,通过网上视频学习和自己实践,有些不成文的实践就零碎的记录在此吧. 系统也可安装CentOS DVD版. 1.先进入配置文件,并查看基本情况,如下: 2.用vi编辑器打开物理网卡 ...
- 2021.05.04【NOIP提高B组】模拟 总结
T1 题目大意, \(S_{i,j}=\sum_{k=i}^j a_k\) ,求 \(ans=\min\{ S_{i,j}\mod P|S_{i,j}\mod P\ge K \}\) 其中 \(i\l ...
- ExtJS 同行表单域对齐有误处理办法
更新记录 2022年5月29日 第一次编辑.使用的ExtJS版本:ExtJS 7.4 问题 原本都是显示正常的表单域,比如这些文本框.选择框都是正常. 在用户进行操作,然后显示验证提示后,明显出现了问 ...
- [自制操作系统] 第05回 CPU的三种模式
目录 一.前景回顾 二.实模式和保护模式 一.前景回顾 在之前我们说到,loader的作用才是读取加载操作系统内核,那么我们的重心就应该是loader.S文件,其实我们接下来也的确是会往loader. ...