shell学习第一天

shell基础知识



Shell的作

是解释执用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive),

Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执完,而不必一条一条地敲命令。

历史上有很多shell(如:sh,csh,ksh,tcsh),还有bash。

shell执行脚本

#!/bin/bash
echo "this is a test"
cd ..
ls

执行结果:

Shell脚本中用#表示注释,相当于C语言的//注释。但如果#位于第一行开头,并且是则例外,它表示该脚本使用后面指定的解释器/bin/sh解释执。

执行方式:chmod +x exe.sh

Shell会fork一个子进程并调用exec执行./script.sh这个程序,exec系统调用应该把子进程的代码段替换成./script.sh程序的代码段,并从它的_start开始执行。然而script.sh是个文本文件,根本没有代码段和_start函数,怎么办呢?其实exec还有另外一种机制,如果要执行的是一个文本文件,并且第行用Shebang(#) 指定了解释器,则用解释器程序的代码段替换当前进程,并且从解释器的_start开始执行,而这个文本件被当作命令行参数传给解释器。因此,执行上述脚本相当于执行程序 。

shell变量

环境变量可以从父进程传给子进程,因此Shell进程的环境变量 可以从当前Shell进程传给fork出来的子进程。用printenv命令可以显示当前Shell进程的环境变量。
本地变量只存在于当前Shell进程,用set命令可以显示当前Shell进程中定义的所有变量(包括本地变量
和环境变量)和函数。
环境变量是任何进程都有的概念,而本地变量是Shell特有的概念。

VARNAME=value

注意等号两边都不能有空格,否则会被Shell解释成命令和命令行参数

变量引用

如果一个变量叫做VARNAME,用${VARNAME}可以表示它的值

echo $SHELL
echo $SHELLab

echo ${SHELL}
echo ${SHELL}abc

注意,在定义变量时不用$,取变量值时要用$,和C语言不同的是,Shell变量不需要明确定义类 型,事实上Shell变量的值都是字符串,比如我们定义VAR=45,其实VAR的值是字符串45而非整数。Shell变量不需要先定义后使用,如果对一个没有定义的变量取值,则值为空字符串.

命令代换:`或$()

由反引号括起来的也是一条命令,Shell先执行该命令,然后将输出结果立刻代换到当前命令行中。

$ DATE=`date`
$ echo $DATE

$ DATE=$(date)
$ echo $DATE

算术代换:$(())(用于算术计算,$(())中的Shell变量取值将转换成整数。注:$(())中只能用+-*/和()运算符,并且只能做整数运算)

$ VAR=45    //上边提到VAR位初始化前是字符串
$ echo $(($VAR+3))

运算结果:48

转义字符

如果创建$ $的文件(中间有空格)

$ touch \$\ \$

转移字符\:第一个针对符号$,第二个针对空格,第三个针对$

单引号

单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外, 但是字符串中不能出现单引号

echo ‘`date`‘

双引号

双引号用于保持引号内所有字符的字面值(回车也不例外),但以下例子除外(即具有解释的意思)

$加变量名可以取变量的值
反引号仍表示命令替换
\$表示$的字面值
\`表示`的字面值(反引号)
\"表示"的字面值
\\表示\的字面值 除以上情况之外,在其它字符前面的\无特殊含义,只表示字面值:

echo "`date`"

总结 :由结果可以看出双引号具有解释的作用,单引号不解释,只是输出内容。

时间: 2024-07-29 01:26:35

shell学习第一天的相关文章

shell脚本学习第一课

shell是一种程序设计语言,是访问操作系统内核的服务. Linux的shell种类常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh) Shell脚本执行的两种方法 ./shell.sh 根据shell脚本第一行指定的shell执行 /bin/sh test.sh 根据命令

第八章 shell学习之循环和结构化命令

for循环 1. 列表for循环 for variable in {list}  #有些像C++/CLR中的for each do ... done 如: 1. [[email protected] tmp]# cat b.sh #! /bin/bash for i in 1 2 3 4 5      #1 2 3 4 5等价于{1..5} do echo $i done [[email protected] tmp]# ./b.sh 1 2 3 4 5 2. [[email protected

第四章 shell学习之sed命令和awk编程

sed命令 sed只是对缓冲区中原始文件的副本进行编辑,不改变源文件,所以要保存则要重定向到另一个文件 sed三种方式: 1.sed [选项] 'sed命令' 输入文件 2.sed [选项] -f sed脚本文件 输入文件 3../sed脚本文件 输入文件 其中3的sed脚本文件要以#! bin/sed -f等开头 选项: -n 不打印所有行到标准输出,默认先打印匹配的再打印所有 -e 关联多个sed命令 -f 调用sed脚本文件 定位文本: x x为指定行号 x,y 从x到y行 /patter

第五章 shell学习之文件的排序、合并和分割

sort命令 sort [选项] [输入文件] 选项: -c 测试文件是否已经排序,如果未被排序则输出第一个未被排序的记录 -k 指定排序的域 -m 合并两个已排序的文件,合并的文件也已经排序,如sort -m a1 a2,a1的记录被有序的插入a2 -n 根据数字的大小进行排序,一般放在域号后,如-k3n -o 将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分割符,如-t: -u 去除结果中的重复行 sort和awk联合 例: [[email protected] tmp]#

第六章 shell学习之变量和引用

变量 本地变量:类似于局部变量,只在当前shell进程有效 环境变量:适用于所有登录进程所产生的子进程 位置参数:用于向shell脚本传递参数,只读 变量替换和赋值 引用变量值就称为变量替换,$就为变量替换符号,如a为变量名则$a或${a}为变量值 将值赋给某个变量名就称为变量赋值,格式:variable=value或${ variable=value },如值中包含空格则必须用"" 清除变量的值: unset 变量名 设置只读变量: variable=value readonly v

Shell学习之: 脚本之间的调用

在Java,Python中,可以用import的方式来进行脚本或模块之间调用,例如: >>> import math >>> math.sqrt(4) 2.0 在Shell中要如何调用别的shell脚本,或别的脚本中的变量,函数呢? 方法一:   . ./subscript.sh       方法二:   source ./subscript.sh 注意: 两个点之间,有空格,千万注意. 两个脚本不在同一目录,要用绝对路径 为简单起见,通常用第一种方法 例如: main

ADB Shell学习

ADB Shell 学习 又是一个周末了,最怕闲来无事的周末,于是给自己找点事情做,ADB shell这一块一直没有系统的学习,正好趁此机会学习. 主要通过学习资料和adb –help文档学习 怎么使用ADB shell命令 首先找到Andorid的SDK安装路径或者单独安装ADB组件,sdk中adb路径在 cd <adb-path> #执行adb命令 adb shell Mac下 #配置adb环境变量 vi ~/.bash_profile #编辑该文件,添加你的adb路径 export AD

Bash编程基础知识学习第一节

Bash编程基础知识学习 一.bash的由来 1 .什么是Bash 什么是Shell Bash 是GNU Bourne-Again SHell,是目前大多数Linux发行版采用的Shell. Shell 是*nix提供给用户使用的界面.一个操作系统的底层是独立运行的, 用户界面和底层分开,可以最大限度的保证系统稳定.Shell就是一个特殊的程序,负责接受用户的命令,并把系统的响应返回给用户. Bash Shell 一般不需要自己安装,在安装发行版的同时都会安装好. Shell的存在是和登陆相关的

Shell学习之路和我发布过的Shell脚本博文

Shell学习之路 目录 Shell学习之路[第一篇]:别名,管道,用户配置文件,变量,read Shell学习之路[第二篇]:条件测试,运算符,选择结构,for循环结构 Shell学习之路[第三篇]:While循环,C-for循环,Until循环,case分支结构,流程控制语句 Shell学习之路[第四篇]:函数,数组,变量替换 Shell学习之路[第五篇]:多线程脚本 Shell学习之路[第六篇]:Trap信号捕捉命令介绍与Shell结合实战讲解 Shell学习之路[第七篇]:Linux下d