【shell】shell基础
一、数据类型
1.shell变量
运行shell时,会同时存在三种变量:
- 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
- 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
- 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
1.1命名规则
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
1.2引用变量
$varible_name
${varible_name}
1.3只读变量
readonly varible_name
1.4删除变量
unset varible_name
注意:unset不能删除只读变量
2.shell字符串
2.1单双引号区别
- 双引号里可以有变量
- 双引号里可以出现转义字符
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
2.2获取字符串长度
${#str_name}
2.3提取字符串
echo ${str_name:n:m} 从第N个起截取Mge字符(包括空格)
2.4查找字符串位置
str="today is monday"
echo `expr index "${str}" as char` (起始值为1)
查找字符 m 或 o 的位置(哪个字母先出现就计算哪个):
3.数组
3.1定义数组
array_name=(value0 value1 value2 ....)
或array_name[0]=value1
3.2读取数组
获取特定值:${array_name[n]}
获取所有数值${array_name[@]}
3.3获取数组长度
${#array_name[@]}或${#array_name[*]}
获取单个元素长度 ${#array_name[n]}
4.注释
4.1单行注释 #
4.2多行注释
二、shell传递参数
1.传递参数
1.1传递参数
脚本中内容如下:
- #!/bin/bash
- echo "Shell 传递参数实例!";
- echo "执行的文件名:$0";
- echo "第一个参数为:$1";
- echo "第二个参数为:$2";
- echo "第三个参数为:$3";
为脚本设置可执行权限并执行脚本,结果如下:
- $ chmod +x test.sh
- $ ./test.sh 3 #传入了4个参数
- Shell 传递参数实例!
- 执行的文件名:./test.sh
- 第一个参数为:
- 第二个参数为:
- 第三个参数为:
注意:在linux系统中输入以上命令时提示“/bin/sh^M:损坏的解释器: 没有那个文件或目录”
这是由于脚本文件在保存时使用了DOS文件格式造成的,可以用vim打开文件,然后执行下列操作:
:set ff=unix
:wq
1.2处理参数的字符
注意:$*与$@的区别:
只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。
三、shell运算符
1.算数运算符
原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用
如:val=`expr 2 + 2`或 $[2+2]
2.关系运算符
3.布尔运算符
4.逻辑运算符
5.字符串运算符
- a=
- b=
- if [ $a != $b ]
- then
- echo "$a != $b : a 不等于 b"
- else
- echo "$a != $b: a 等于 b"
- fi
6.文件测试运算符
注意:表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2;赋值=左右两端不能有空格
条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
四、命令
1.echo
1.1显示普通字符串
1.2显示转义字符串
echo " \"hello\" "
1.3显示变量
1.4显示换行
换行: echo -e "today is \n"
echo “Friday”
不换: echo -e "today is \c"
echo “Friday”
1.5显示重定向
echo "it is a test">myfile
1.6原样输出
单引号 echo 'my $name '
1.7显示命令执行结果
echo `expr date`
2.printf
类似c中printf,详见https://www.runoob.com/linux/linux-shell-printf.html
3.test
Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
详见https://www.runoob.com/linux/linux-shell-test.html
以下程序效果一样
五、循环
1. if else
- if condition1
- than
- command1
- elif condition2
- than
- command2
- else
- than
- command
- fi
2.for 循环
- for var in item1 item2 ... itemN
- do
- command1
- command2
- ...
- commandN
- done
3.while
- while condition
- do
- command
- done
4.unitil
- until condition
- do
- command
- done
5.case
- case 值 in
- 模式1)
- command1
- command2
- commandN
- ;;
- *)
- command1
- command2
- commandN
- ;;
- esac
无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
6.跳出循环(break和continue)
六、shell函数
1.定义函数
- [ function ] funname [()]
- {
- action;
- [return int;]
- }
- 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
- 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
- funWithReturn(){
- a=
- b=
- echo "两个数字分别为 $a和 $b!"
- return $[a+b]
- }
- funWithReturn
- echo "输入的两个数字之和为 $? !"
注意:函数返回值在调用该函数后通过 $? 来获得。
2.函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
注意:$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
七、shell文件包含
- . filename # 注意点号(.)和文件名中间有一空格
- 或
- source filename
- #!/bin/bash
- #使用 . 号来引用test1.sh 文件
- . ./test1.sh
- # 或者使用以下包含文件代码
- # source ./test1.sh
- echo "菜鸟教程官网地址:$url"
【shell】shell基础的更多相关文章
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Linux shell入门基础(六)
六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...
- Linux shell入门基础(一)
Linux shell入门基础(一): 01.增加删除用户: #useradd byf userdel byf(主目录未删除) userdel -r byf 该用户的属性:usermod 用 ...
- Shell编程基础篇
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...
- Shell的基础介绍和案例
一.shell脚本基础 1.第一个脚本 vim first.sh 分别使用三种方法可以执行脚本: ./first.sh (需要有可执行的权限) sh first.sh . fir ...
- Shell编程基础篇-上
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...
- 【转】Shell编程基础篇-下
[转]Shell编程基础篇-下 1.1 条件表达式 1.1.1 文件判断 常用文件测试操作符 常用文件测试操作符 说明 -d文件,d的全拼为directory 文件存在且为目录则为真,即测试表达式成立 ...
- 【转】Shell编程基础篇-上
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
- shell 1基础
shell简介 shell是一个用C语言编写的程序,是用户使用Linux的桥梁.shell既是一种命令语言,又是一种程序设计语言. shell脚本(shell script),是一种为shell编写的 ...
- shell编程基础(转载)
Shell编程基础 原作者 Leal:请参阅页面底部的编者列表. 授权许可: 创作共享署名协议 GNU 自由文档许可证 注意:本文仍然在持续的修订之中,且错漏之处可能较多.如果能够阅读英语的话,可以考 ...
随机推荐
- 123467123456#1#-----com.twoapp.DaDiShuGame01--前拼后广--现实打地鼠游戏jiemei
com.twoapp.DaDiShuGame01--前拼后广--现实打地鼠游戏jiemei
- iOS通知注意点
之前以为控制器发送通知,只有你满足:1>注册接收通知:2>进入本页面才能接收到值. 今天朋友问了一个问题: 他的逻辑如下: 退出登录发送通知,需要好几个界面会收到通知,然后这几个界面进行网 ...
- 生成count位随机数工具类
工具类 import java.util.Random; /** * 生成6位随机数字 */ public class GeneratorCode { /** * * @Title: getCode ...
- Unity3D 原来Unity比较新的版本支持中文
注意: Unity 2018.2 以上版本才可以
- 人工神经网络反向传播算法(BP算法)证明推导
为了搞明白这个没少在网上搜,但是结果不尽人意,最后找到了一篇很好很详细的证明过程,摘抄整理为 latex 如下. (原文:https://blog.csdn.net/weixin_41718085/a ...
- 排序算法三:Shell插入排序
排序算法三:Shell插入排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评> ...
- 高级UI-RecyclerView简单使用
RecyclerView从Android 5.0开始引入,用以替代ListView.GridView控件,RecyclerView的存在,使得控件的耦合度更低,在ListView中需要使用ViewHo ...
- ORACLE创建表空间和用户,并分配权限
注意:如果是创建新的库,首先要先创建表空间,之后才可以创建用户:1.//创建临时表空间 create tablespace NCPZS_DATA datafile '/home/soft/oracle ...
- easyui 解决连弹两个dialog时候,第二个dialog居中问题
$('#showDivSecond').dialog('center'); (该方法自1.3.1版开始可用)
- 在eNSP下使用Hybird接口
1.实验拓扑图 2.实验编址表 3.实验过程 按照拓扑图设置各个PC机的IP地址 双击PC1然后弹出对话框,依次设置主机名:PC1→IP地址:192.168.1.1→子网掩码:255.255.255. ...