3.1 shell简介、变量、运算符
小知识:
ipcs可以查看系统中创建的ipc进程间通信资源,例如信号量、共享内存等。示例如下:
什么是shell?
shell是核心程序kernel之外的指令解析器,是一个程序,同时是一种命令语言和程序设计语言。
shell是命令解析器,用户输入命令,它去解析。
shell的类型:
ash、bash、ksh、csh、tcsh
使用cat /etc/shells可以查看系统下的shell,如下所示:
使用echo $SHELL 可以查看当前用户运行的shell
Linux下默认的shell是bash
程序在shell中执行。
ls命令执行过程:
我们敲入命令之后命令会传给bash,bash shell解析这个命令,并传给内核,让内核执行相应的程序。
每一个命令都会在一个新的shell中执行。
小知识:
S代表socket文件。
查看socket设备文件,使用命令ls /tmp/.X11-unix/X0 -lt,如下所示:
chown命令:
chowm name.groupname filename 或者chowm name.groupname dir -R递归的修改目录下所有文件所属的用户和用户组。中间是.或者:都可以。
chgrp只改变用户组,用法chgrp groupname filename
创建一个文件的默认权限是644,创建文件夹的默认权限是755,如下所示:
这是为什么呢?
这是因为umask掩码在作怪,机制如下:
umask的默认值为022(可以使用umask命令查看),在~/.bash_profile文件中。如果修改后,可以使用source ./.bash_profile或者. ./.bash_profile重新加载这个文件,然后就可以生效了。
小知识:
ls -lda -d选项是看目录本身的信息,而不是看目录里面的内容。
shell知识:
第一行出现的#不是注释,第一行的#和后面的执行命令!结合,表示要使用哪一个shell解释器来解释这个脚本。
#!/bin/bash 表示使用bin下的bash来作为解释器。
其他行的#表示注释。
变量声明: mytext = "hello world",变量没有类型,引用变量需要使用$。基本需要有执行权限才可以执行。
第一个shell程序如下:
#!/bin/bash hello="hello world" echo $hello
执行结果如下:
定义变量时,前后不能出现空格。否则报错。取变量的值也可以使用echo ${hello}。
shell特性:
1、别名
2、命令替换
ls `cat myfile` -alh 通过单反号,把cat myfile的内容输出,传给ls命令
注意单反号,在键盘的~符号的下方,键盘左上角。
演示如下:myfile.txt中的内容为tmp。
3、后台处理,将一个进程放到后台执行,类似守护进程
有的linux版本不需要nohup,只需要在命令的最后加上&即可。
4、管道
5、重定向
6、模式匹配
7、特殊字符
双引号(“”):用来使shell无法认出空格、制表符和其他大多数特殊字符,比如:
建立一个带空格的文件touch “wang bao ming”。这时候的文件名字就是wang bao ming,如果创建文件时不带引号touch wang bao ming,那么会创建出来三
个文件,文件名字是分别是wang、bao、ming。
单引号(‘’):用来使shell无法认出所有特殊字符。
反引号(`):用来替换命令
反斜杠(\):用来使shell无法认出特殊的字符,使其后的字符失去特殊的含义,是转义字符。
例:创建带空格的文件touch my\ file。 文件的名字就是my file。
分号(;):允许在一行上放多个命令,mv 1.txt 2.txt; mov 2.txt 3.txt
&:后台执行命令的符号
括号():创建成组的命令。
大括号{}:创建命令块
竖杠(|):管道标识符
<>&:重定向标识符
*?[ ]!:模式匹配
$:变量名的开头
#:表示注释,第一行除外
空格符、制表符、换行符:当做空白
\可以对空格进行转义,使其后的字符失去特殊含义,如下所示:
abc def是一个文件,不是两个文件。
变量和运算符:
变量:
本地变量只存在于当前shell中,退出当前shell后变量消失。可以使用readonly将本地变量变为只读。在命令行定义myvar=abc,这个myvar变量就是本地变量,退出当前shell时这个变量就消失了。
readonly变量只能在定义时赋值一次。
export设置的环境变量可以被这个shell及其所有子进程使用,如果想让任何一个进程使用设置的环境变量,应该在文件中设置。unset用来清除变量。
PS1最后的 \$代表提示符。
shift可以让参数移动(向左移),示例程序如下:
#!/bin/bash echo "parm1 : $1"
echo "parm2 : $2"
echo "parm3 : $3"
echo "parm4 : $4" echo "run shift ..."
shift
echo "parm1 : $1"
echo "parm2 : $2"
执行结果如下:
引号:
变量和替换操作,在脚本中执行变量替换时,最容易犯的一个错误就是引号的错误。例如:
将da * 用双引号引起来和不用双引号引起来结果是完全不一样的。
双引号:使用双引号可以引用除字符$,`反引号,\反斜杠外的任意字符或者字符串。双引号里面的$var是会进行变量替换的。例如:
加上-e的话shell会去解析双引号里面的回车换行,(-e解析转移字符)例如:
单引号:单引号与双引号类似,单引号不做任何解释,shell解释器会忽略任何引用值,也就是不会进行变量替换,$var会原样输出。例如:
单反号:单反号里面的东西是要执行的命令
反斜杠:对特殊字符进行转义
echo -e的实验:
echo的-e选项会解析双引号中的 换行\n,如下所示:
双引号中的$var,会引用变量的值,而不是当做字符输出,如上图。而使用单引号时,$就不会引用变量的值了,而是当做字符输出,如下所示:
单反号``里面的是表示执行命令。
运算符:
运算符对象:
数字、字符(字面量)
变量
表达式
表达式:
运算符和运算符对象的组合体
表达式类型:
按位运算符:
~op1 取反
op1<<op2 左移
op1>>op2 右移
op1&op2 按位与
op1^op2 按位异或
op1 | op2 按位或
例:
echo $[2<<4]
echo $[2^4]
$[ ] 的意思是告诉shell对方括号中的表达式求值,例: echo $[3+9]
逻辑运算符:
&& 逻辑与运算
|| 逻辑或运算, 例:echo $[1 || 1]
赋值运算符:
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
let count=$count+$change
let count+=$change
对变量的运算:可以使用let var+=5这种方式使var的值自增5。也可以使用var=$[ $var + 5 ]这种方式。 例:
其它的运算符实验示例:
表达式替换:
3.1 shell简介、变量、运算符的更多相关文章
- shell编程变量介绍与表达式详解
shell变量简介 变量是任何一种编程语言都必不可少的组成部分,变量用来存放各种数据.脚本语言在定义变量时通常不需要指明类型,直接赋值就可以,Shell 变量也遵循这个规则. 在 Bash shell ...
- shell 简介
shell 简介 shell既是一种命令语言,也是一种程序设计语言.作为命令语言,它交互式地解析和执行用户输入的命令:作为程序设计语言,他定义了各种变量和参数,并提供了许多的高级语言才具有的控制结构, ...
- shell之路【第一篇】shell简介与入门
shell简介 1.Shell 诞生于 Unix,Unix的第一个脚本语言,是与 Unix/Linux 交互的工具,单独地学习 Shell 是没有意义的,shell使用的熟练程度反映了用户对Unix/ ...
- Linux学习——shell编程之运算符
shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...
- Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助
Python第二天 变量 运算符与表达式 input()与raw_input()区别 字符编码 python转义符 字符串格式化 format函数字符串格式化 帮助 目录 Pychar ...
- shell 6基本运算符
shell支持多种运算符: * 算数运算符 * 关系运算符 * 布尔运算符 * 字符串运算符 * 文件测试运算符 算数运算符 + 加 `expr $a + $b` 结果为 30 - 减 `expr $ ...
- Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言
Shell简介:1分钟理解什么是Shell 脚本语言 解释器 以及编译器和编译语言 现在我们使用的操作系统(Windows.Mac OS.Android.iOS 等)都是带图形界面的,简单直观,容易上 ...
- Linux Shell系列教程之(一)Shell简介
本文是Linux Shell系列教程的第(一)篇,更多shell教程请看:Linux Shell系列教程 想要学习linux,shell知识必不可少,今天就给大家来简单介绍下shell的基本知识. S ...
- shell的变量以及常见符号
shell的变量以及常见符号 常见变量 不同于其它语言需要先声明变量,shell的变量直接使用 eg: a=15 调用变量的话 $a 或者 ${a} $? #判断上一条命令执行的是否成功 0 ...
随机推荐
- Java 注解的概念与种类
Java 注解的概念与种类 一,什么是注解 注解和XML文件都是常用的,对web项目进行配置性描述的方式. 举个最简单的例子,对于一个Servlet,比如LoginServlet,采用如下方式: @W ...
- C#通过Oracle.ManagedDataAccess无法访问Oralce
问题描述:通过C#引用Oracle.ManagedDataAccess.dll访问Oracle,写了如下一段代码,在本机能正常访问,但是将编译后的exe放到服务器上面就无法访问了,一直提示登录失败.而 ...
- HTML表单组件
HTML表单组件 一.说明 form标签里面的东西 二.效果图 三.代码 <!DOCTYPE html> <html> <head> <title>Fo ...
- Windows Update 自动更新 设定 被锁(变灰)
估计是McAfee自动更改掉的. 真TM烦人. 方法 1 不过找到了回复方法了: http://www.askvg.com/how-to-change-windows-update-settings- ...
- 自适应界面开发总结——WPF客户端开发
1.由于界面大小是变化的,所以必须有一个稳定不变的参考界面(即在一个标准的界面尺寸下进行WPF界面开发,比如:发票查验V3.0的美工设计尺寸——1024*740): PS:在WPF的用户控件Xam ...
- English trip -- VC(情景课)5 B Places around town 城市设施
Vocabulary focus 核心词汇 drugstore 药店: pill n. 药丸:弹丸,子弹:口服避孕药 medicine n. 药:医学:内科:巫术 hos ...
- 20170728xlVba SSC_LastTwoDays
Public Sub SSCLastTwoDays() Dim strText As String Dim Reg As Object, Mh As Object, OneMh As Object D ...
- android--------volley之网络请求和图片加载
Volley是 Google 推出的 Android 异步网络请求框架和图片加载框架. Volley的特性 封装了的异步的请求API.Volley 中大多是基于接口的设计,可配置性强. 一个优雅和稳健 ...
- Queue CodeForces - 353D (思维dp)
https://codeforces.com/problemset/problem/353/D 大意:给定字符串, 每一秒, 若F在M的右侧, 则交换M与F, 求多少秒后F全在M左侧 $dp[i]$为 ...
- qxx项目大文件上传
1. 在做大文件上传的时候,要注意修改文件的配置,php.ini的配置,还有连接时间.这些东西都记不清了,明天需要问一下芳哥,然后遇到问题的时候就能自己解决了. 2. 然后就遇到一个很尴尬的问题:大文 ...