shell入门

混江龙づ霸主 提交于 2020-01-07 20:56:10

前言

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

常见的shell指令

echo命令用于向窗口输出文本。

使用变量:使用一个定义过的变量,只要在变量名前面加上$符号,还可以加上对变量加上花括号{},变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。笔者建议,推荐给所有变量加上花括号,这是个好的编程习惯。
your_name=“qinjx”
echo $your_name
echo ${your_name}

for skill in Ada Coffe Action Java; do
echo “I am good at ${skill}Script”
done
如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

删除变量:使用unset命令删除变量
变量被删除后不能再次使用,unset命令不能删除只读变量

只读变量:使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
#!/bin/bash
myUrl=“http://www.google.com”
readonly myUrl
myUrl=“http://www.baidu.com”
运行脚本,结果是: /bin/sh: NAME: This variable is read only.

变量类型:运行shell时,会同时存在三种变量
• 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
• 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
• 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

获取字符串长度
string=“abcd”
echo ${#string} #输出 4
提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:
string=“runoob is a great site”
echo ${string:1:4} # 输出 unoo

Shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
数组名=(值1 值2 … 值n)
例如:
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制。
读取数组
读取数组元素值的一般格式是:
${数组名[下标]}
例如:
valuen=${array_name[n]}
使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:

取得数组元素的个数
length=KaTeX parse error: Expected '}', got '#' at position 2: {#̲array_name[@]} …{#array_name[*]}

取得数组单个元素的长度
lengthn=${#array_name[n]}

Shell基本运算符

Shell 基本运算符
Shell 和其他编程语言一样,支持多种运算符,包括:
算数运算符
关系运算符
布尔运算符
字符串运算符
文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
例如:两个数相加: sum=expr 2 + 2 #sum=4
两点注意:
• 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
• 完整的表达式要被 包含,注意这个字符不是常用的单引号,在 Esc 键下边。

显示变量
read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
#!/bin/sh
read name
echo “$name It is a test”
以上代码保存为 test.sh,name 接收标准输入的变量,结果将是:
[root@www ~]# sh test.sh
OK #标准输入
OK It is a test #输出

shell脚本的简单使用

#cat cells.txt|head -n 10 |while read cellid ;do echo $cellid;done
# curl "http://10.78.228.183:3002/simulations/5d4b79fe77cc6a2500f07ade/\$cellid"|jq '.[0]|.file|.url' -r

cat cells0823.txt|head -n 22 |while read cellid
do
echo "http://10.78.228.183:3002/simulations/5d5e566677cc6a2500f07aee/$cellid"
#curl "http://10.78.228.183:3002/simulations/5d4b79fe77cc6a2500f07ade/${cellid}"
curl "http://10.78.228.183:3002/simulations/5d5e566677cc6a2500f07aee/${cellid}"
tifurl=`curl "http://10.78.228.183:3002/simulations/5d5e566677cc6a2500f07aee/${cellid}"|jq '.[0]|.file|.url' -r`
echo $tifurl
a=`echo $tifurl |awk -F/ '{print $4}'`
echo $a
echo http://10.78.228.183:3002/gridfs/file?filename=$tifurl
wget "http://10.78.228.183:3002/gridfs/file?filename=$tifurl" -O 5d5e566677cc6a2500f07aee-$cellid-$a
done
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!