linux bash 的基础语法
示例均来自网络,附带有原始链接地址,自己练习整理发出,均测试可用
linux shell 基本语法 - 周学伟 - 博客园
https://www.cnblogs.com/zxouxuewei/p/6393092.html
变量声明和赋值
定义变量,等号左右不要有空格
通过export 变成全局变量
#!/bin/bash
#a.sh
a=666
b=hello
g_user=root
export g_user#全局变量
echo $a
echo $b
echo $g_user
#调用
bash a.sh
把命令结果赋值给变量
- 圆括号
current_date=$(date)
echo current data is [$current_date]
- 用反引号,和键盘上的波浪符号一个键(仅参考,使用1即可)
current_date=`date`
echo current data is [$current_date]
- 花括号加反引号(仅参考,使用1即可)
current_date={`date`}
echo current data is [$current_date]
if条件判断
#!/bin/bash
#a.sh
if [[ $1 == 1 ]]; then
echo "first argument is 1"
else
echo "first argument is not 1"
fi
#调用
bash a.sh 1
case分支判断
#!/bin/bash
#a.sh
case $1 in
1)
echo "the case is 1"
;;
2)
echo "the case is 2"
;;
3)
echo "the case is 3"
;;
4)
echo "the case is 4"
;;
*)
echo "no case match first argument"
;;
esac
#调用
bash a.sh 2
for循环语句
形式一
#!/bin/bash
#a.sh
for (( i = 0; i < 10; i++ )); do
echo "current value is $i"
done
#调用
bash a.sh
形式2
#!/bin/bash
#a.sh
for i in 1 2 3 4 5; do
echo "current value is $i"
done
#调用
bash a.sh
while循环
#!/bin/bash
#a.sh
i=$1
while [[ $i > 0 ]];
do
echo "now i's value is $i"
let "i=i-1"
done
#调用
bash a.sh 10
函数
shell自定义函数 - 立志做一个好的程序员 - 博客园
https://www.cnblogs.com/oxspirt/p/7246075.html
- 1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。
- 2、
total=$(fSum 3 2); 通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此各个输入参数直接用空格分隔,命令里面获得参数方法可以通过:\(0…\)n得到。 $0代表函数本身。 - 3、函数返回值,只能通过
$?系统变量获得,直接通过=获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。 - 4.可以带function fun()定义,也可以直接fun() 定义,不带任何参数。
- 5.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
#!/bin/bash
#a.sh
function add()
{
echo "arg1 is $1,arg2 is $2"
return $(($1+$2))
}
plus()
{
echo "arg1 is $1,arg2 is $2"
return $(($1*$2))
}
value=$(add $1 $2);
echo "[echo value:$value,function add value:$?]"
value=$(plus $1 $2);
echo "[echo value:$value,function plus value:$?]"
#调用
bash a.sh 5 7
数组
#!/bin/bash
#a.sh
name=(a bbb c d e f g) #数组
length=${#name[@]} #获取数组长度
echo length1:${#name[@]} #获取数组长度
echo length2:${#name[*]} #获取数组长度
echo length3:${#name[1]} #取得数组单个元素的长度
for (( i = 0; i < $length; i++ )); do
echo value $i=${name[$i]} #读取数组的值
done
#调用
bash a.sh
I/O
Shell中重定向的深入讲解_linux shell_脚本之家
https://www.jb51.net/article/142918.htm
> 输出重定向,覆盖方式
>> 输出重定向,追加方式
< 输入重定向
<< 标准输入来自命令行的一对分隔号的中间内容
实例
#生成 input.txt
cat <<EOF>input.txt
zhao
qian
sun
li
zhou
wu
zheng
wang
EOF
#将input.txt文件作为sort命令的输入
sort < input.txt
# 将排序后的结果输出到input.sort.txt文件中
sort < input.txt >input.sort.txt
# 将排序后的结果追加输出到input.txt文件中
sort < input.txt >> input.txt
#将标准输入重定向为input.txt文件,标准输出重定向为input2.txt文件(追加),将标准错误重定向为error文件
sort 0< input.txt 1>> input2.txt 2> input.error.txt
一个程序的的输入可以来自于键盘,也可以来自于文件或者其他设备;同样的,一个程序也可以将输出显示在屏幕或者保存到文件中。这就涉及到标准输入、标准输出和标准错误。
程序的输入是标准输入,默认是键盘,用户可以将其指定为文件或其他设备。
程序的输出有两种,即标准输出和标准错误,其中标准输出是程序的正常输出、标准错误是程序的错误输出。二者默认都被指定为屏幕,用户可以将其指定为文件或其他设备。
每个输入源和输出地都有一个描述符,标准输入的描述符为0,标准输出的描述符为1,标准错误的描述符为2。
EOF
linux下EOF写法梳理 - 散尽浮华 - 博客园
https://www.cnblogs.com/kevingrace/p/6257490.html
执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!
这个时候,就可以使用EOF结合cat命令进行行内容的追加了。
EOF是END Of File的缩写,表示自定义终止符.既然自定义,那么EOF就不是固定的,可以随意设置别名,在linux按ctrl-d就代表EOF.
EOF一般会配合cat能够多行文本输出.
#把EOF的内容作为cat 的输入
cat <<EOF
aaa
bbb
ccc
EOF
#把EOF的内容作为cat 的输入,并把cat的输出定向到a.txt
cat <<EOF > a.txt
aaa
bbb
ccc
EOF
getopts
获取参数定义
#!/bin/bash
#a.sh
while getopts "a:b:c:r:" arg; do
case $arg in
a)
a=$OPTARG
;;
b)
b=$OPTARG
;;
c)
c=$OPTARG
;;
r)
repo=$OPTARG
;;
?)
echo you need help
;;
esac
done
echo "a:$a,b:$b,c:$c,repo:$repo"
#调用
bash a.sh -a 3 -b 4 -c 5 -r 6
linux bash 的基础语法的更多相关文章
- linux base shell 基础语法
转载 本文主要是基础的基础,希望对大家有所帮助 一.Shell基本类型的变量: (1)Shell定义的环境变量: Shell在开始执行时就已经定义了一些和系统的工作环境有关的变量,用户还可以重新定义这 ...
- [linux]BASH 的基本语法
最简单的例子 -- Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1 最简单的例子 -- ...
- -Shell 教程 Bash 脚本 基础语法 MD
目录 目录 Shell 简介 Shell 脚本 Shell 环境 第一个shell脚本 Shell 变量 定义变量 使用变量 只读变量 删除变量 Shell 字符串 单引号 双引号 字符串基本操作 S ...
- Linux bash shell脚本语法入门
1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这个脚本 # //shell脚本注释符号 2.变量和使用 HOME= ...
- (转)Linux bash shell脚本语法入门
http://www.linuxsky.org/doc/newbie/201004/389.html 1.基础 #!/bin/bash //bash脚本第一句都是这个,他会让系统指定以bash来解释这 ...
- linux base shell 基础语法2
转载 http://blog.csdn.net/aggrelxf/article/details/8263110 单引 双引 反引用[] [[]] 将命令的输出读入一个变量中,可以将它放入双引号中,即 ...
- Linux C 程序 基础语法(1)
1.Linux 下第一支C程序,控制台打印一句话. vi first.c //linux新建文件 #include<stdio.h> int main() { printf("w ...
- Bash的基础知识man手册
Bash的基础知识man手册 由于基于Android类设备的渗透测试都是通过各类终端实现.所以掌握Shell相关操作就显得尤为重要.Bash是一个为GNU计划编写的Unix Shell本文选自基于An ...
- linux 脚本编写基础(一)
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...
随机推荐
- 推荐 | 中文文本标注工具Chinese-Annotator(转载)
自然语言处理的大部分任务是监督学习问题.序列标注问题如中文分词.命名实体识别,分类问题如关系识别.情感分析.意图分析等,均需要标注数据进行模型训练.深度学习大行其道的今天,基于深度学习的 NLP 模型 ...
- 【BZOJ1921】【CTSC2010】珠宝商(点分治,后缀自动机)
[BZOJ1921][CTSC2010]珠宝商(点分治,后缀自动机) 题面 洛谷 BZOJ权限题 题解 如果要我们做暴力,显然可以以某个点为根节点,然后把子树\(dfs\)一遍,建出特征串的\(SAM ...
- TCP协议 - 面向连接
一.TCP特性概览 1.面向连接 TCP是基于连接进行数据交互,通信双方在进行数据交互之前需要建立连接,该连接也只能用在双方之间进行交互.这点不像UDP中的组播和广播,可以在同一组中多个主机交互数据. ...
- GO 键盘输入和打印输出
键盘输入和打印输出 一.打印输出 1.1 fmt包 fmt包实现了类似C语言printf和scanf的格式化I/O.格式化verb('verb')源自C语言但更简单. 详见官网fmt的API:http ...
- 面试官,我会写二分查找法!对,没有 bug 的那种!
前言科普 第一篇二分搜索论文是 1946 年发表,然而第一个没有 bug 的二分查找法却是在 1962 年才出现,中间用了 16 年的时间. 2019 年的你,在面试的过程中能手写出没有 bug 的二 ...
- https://jwt.io/一个可以解析token的神奇网站
网址:https://jwt.io/ 效果:
- (六)Amazon Lightsail 部署LAMP应用程序之升级到Amazon EC2
升级到Amazon EC2 将Amazon Lightsail实例升级为Amazon EC2 您将进行以下操作: ①创建使用 Amazon RDS的Web前端实例的快照 ②将该快照导出到 Amazon ...
- 2016年蓝桥杯B组C/C++决赛题目
2016年第七届蓝桥杯B组C/C++决赛题目 点击查看2016年第七届蓝桥杯B组C/C++决赛题解 1.一步之遥 从昏迷中醒来,小明发现自己被关在X星球的废矿车里. 矿车停在平直的废弃的轨道上. 他的 ...
- Java:String,int相互转化
int转String int a: a + “” String.valueOf(a) Interger.toString(a) 一般使用以上几种方法进行转化 第一种方法效率不好,ja ...
- CSS中的选择器(一)
API文档:http://css.cuishifeng.cn/all.html 1. 通配选择符(*) 语法: * { sRules } 说明: 通常不建议使用通配选择符,因为它会遍历并命中文档中所有 ...