Shell编程学习笔记
变量
设置局部变量
变量名=变量值
设置全局变量
export 变量名=变量值
删除变量
unset 变量名
添加PATH环境变量
PATH=$PATH:[路径]
数组变量
mytest=(one two three four five)
echo $mytest
---> one
显示数组某个位置的变量
echo ${mytest[2]}
---> three
显示整个数组变量
echo ${mytest[*]}
---> one two three four five
命令替换
有两种方法可以将命令输出赋给变量:
1、反引号字符(`)
2、$()格式(推荐)
#!/bin/sh
testing=$(date)
echo "The date and time are: " "$testing"
testing2=`date`
echo "The date and time are: " "$testing2"
重定向输入与输出
输出重定向
最基本的重定向将命令的输出发送到一个文件中。bash shell用大于号(>)来完成这项功能
command > outputfile
如果输出文件已经存在了,重定向操作符会用新的文件数据覆盖已有文件
输入重定向
command < inputfile
数学运算
使用 $((expression))
#!/bin/bash
var1=$((1+5))
echo ${var1}
只支持整数运算,浮点运算需要使用bc,待补充
退出脚本
Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码。对于需要进行检查的 命令,必须在其运行完毕后立刻查看或使用$?变量。它的值会变成由shell所执行的最后一条命令 的退出状态码。
exit 命令
默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码退出。
可以改变这种默认行为,返回自己的退出状态码。exit命令允许你在脚本结束时指定一 个退出状态码
#!/bin/bash
var1=10
var2=30
var3=$[$var1 + $var2]
echo The answer is $var3
exit 5
if-then
if command
then
commands
fi
if语句会运行if后面的那个命令。如果该命令的退出状态码是0 (该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。fi语句用来表示if-then 语句到此结束。
if-then-else
if command
then
commands
else commands
fi
当if语句中的命令返回退出状态码0时,then部分中的命令会被执行,这跟普通的if-then 语句一样。当if语句中的命令返回非零退出状态码时,bash shell会执行else部分中的命令。
嵌套 if
if command1
then
commands
elif command2
then
more commands
fi
数值比较
value1=10
value2=11
if [ $value1 -gt 5 ]
then
echo "The test value $value1 is greater than 5"
fi
if [ $value1 -eq $value2 ]
then
echo "The values are equal"
else
echo "The values are different"
fi
字符串比较
比较字符串是否相等
#!/bin/bash
testuser=rich
#
if [ $USER = $testuser ]; then
echo "Welcome $testuser"
else
echo "who are you"
fi
比较字符串大小
#!/bin/bash
val1=baseball
val2=hockey
if [ $val1 \> $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi
判断是否为空
-n和-z可以检查一个变量是否含有数据
#!/bin/bash
# testing string length
val1=testing
val2=''
if [ -n "$val1" ]
then
echo "The string '$val1' is not empty"
else
echo "The string '$val1' is empty"
fi
#
if [ -z "$val2" ]
then
echo "The string '$val2' is empty"
else
echo "The string '$val2' is not empty"
fi
#
if [ -z "$val3" ]
then
echo "The string '$val3' is empty"
else
echo "The string '$val3' is not empty"
fi
文件比较
复合条件测试
if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
使用双括号
双括号命令允许你在比较过程中使用高级数学表达式
#!/bin/bash
val1=10
if (($val1 ** 2 > 90)); then
((val2 = $val1 ** 2))
echo "The square of $val1 is $val2"
fi
使用双方括号
双方括号命令提供了针对字符串比较的高级特性。
#!/bin/bash
if [[ $USER == r* ]]; then
echo "Hello $USER"
else
echo "Sorry, I do not know you"
fi
case 命令
case命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行 为该模式指定的命令。可以通过竖线操作符在一行中分隔出多个模式模式。星号会捕获所有与已 知模式不匹配的值。
#!/bin/bash
case $USER in
rich | barbara)
echo "Welcome, $USER"
echo "Please enjoy your visit"
;;
testing)
echo "Special testing account"
;;
jessica)
echo "Do not forget to log off when you're done"
;;
*)
echo "Sorry, you are not allowed here"
;;
esac
for命令
for var in list
do
commands
done
#!/bin/bash
for test in Alabama Alaska Arizona Arkansas California Colorado; do
echo The next state is $test
done
读取复杂的值
添加了反斜线字符来转义don't中的单引号。将this'll用双引号圈起来。
#!/bin/bash
for test in I don\'t know if "this'll" work; do
echo "word:$test"
done
for命令用空格来划分列表中的每个值。如果在单独的数据值中有 空格,就必须用双引号将这些值圈起来。
#!/bin/bash
# an example of how to properly define values
for test in Nevada "New Hampshire" "New Mexico" "New York"
do
echo "Now going to $test"
done
从变量读取值
#!/bin/bash
list="Alabama Alaska Arizona Arkansas Colorado"
list=$list" Connecticut"
for state in $list; do
echo "Have you ever visited $state?"
done
从命令读取值
#!/bin/bash
file="states"
for state in $(cat $file); do
echo "Visit beautiful $state"
done
更改字段分隔符
IFS环境变量定义了bash shell用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字 符当作字段分隔符:
空格 制表符 换行符
如果bash shell在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。
#!/bin/bash
file="states"
IFS=$'\n'
for state in $(cat $file)
do
echo "Visit beautiful $state"
done
用通配符读取目录
#!/bin/bash
for file in /home/rich/test/*; do
if [ -d "$file" ]; then
echo "$file is a directory"
elif [ -f "$file" ]; then
echo "$file is a file"
fi
done
原文地址:https://www.cnblogs.com/panxianhao/p/17360451.html
- 洛谷P1137 旅行计划
- 洛谷P1722 矩阵 II
- 洛谷P1976 鸡蛋饼
- 洛谷P1420 最长连号
- 各种读入方式速度比较
- 美团NLP实习面试总结一 基本知识4 数据结构二 NLP相关技术1 LSTM2 介绍实体链接与实体映射3 解释随机游走的原理及作用4 命名实体识别
- 【下载】苹果发布Turi Create机器学习框架,5行代码开发图像识别
- codevs 4163 hzwer与逆序对
- ASP.NET Core提供模块化Middleware组件
- CSS预处理器的对比 — sass、less和stylus
- Gensim实现Word2Vec的Skip-Gram模型简介快速上手对语料进行分词使用gensim的word2vec训练模型
- React第三方组件4(状态管理之Reflux的使用②TodoList上)
- 机器学习(六)Sigmoid函数和Softmax函数1 Sigmoid函数2 Softmax函数
- React第三方组件4(状态管理之Reflux的使用①简单使用)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Zeppelin 安装与初体验
- Hive 安装与配置
- 如何将SAP Cloud for Customer的扩展字段放置到Embedded Component中
- pthread的使用
- shell程序设计
- SAP CDS view权限控制实现原理介绍
- shell程序设计的流程控制
- SAP CRM数据库表CRMD_SRV_REFOBJ和CRMD_SRV_OSSET
- 堆和栈的区别
- 用ABAP模拟JavaScript的柯里化语言特性(Curry)
- 使用ABAP并发编程解决一个实际应用场景中的性能瓶颈问题
- SAP Cloud for Customer Oberon视图里的Ruby Scrip
- 干了SAP开发这么多年,我都积累了哪些程序调试技巧
- 谈谈SOCKET
- 使用ABAP实现Mock测试工具Mockito