shell--1.shell 相关及变量

1.shell脚本解释器

Bourme Shell (/usr/bin/sh 或 /bin/sh )
Bourme Again Shell ( /bin/bash )
C Shell ( /usr/bin/csh )
K Shell ( /usr/bin/ksh )
shell for Root ( /sbin/sh)

bash 由于易用和免费,所以在开发环境中广泛应用

2.第一个shell 脚本

#!/bin/bash
echo "Hello World"

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。

3.运行脚本有2种方法,
(1) 一种就是把上面的内容保存到test.sh

chmod +x test.sh
./test.sh

(2)另一种是直接运行解释器,其参数就是上面保存的文件名

/bin/sh test.sh
或
/bin/bash test.sh

这种方式不需要在脚本写解释器信息(#!/bin/bash),写了也没用

4. shell变量

(1)定义规则:
(1) 可以包含字母,数字,下划线,不能有标点符号
(2) 必须以字母或者下划线开头
(3) 大小写敏感
(4) 不能包含bash里面的关键字

(2)使用变量
使用一个定义过的变量,只需在前面加一个$符号
如:

myname="lvyf"
echo "$myname"
ecoh "${myname}"

花括号加不加都行,加上花括号,是让解释器识别变量的边界,如:

echo "this is myname $mynameHaha"
这种 情况不加花括号,解释器就会认为mynameHaha是一个量
正确写法
echo "this is myname ${myname}Haha"

(3)重新赋值

myname="lvyf"
echo "${myname}"
myname="lvyafei"
echo "${myname}"

第二次赋值的时候不用加$ ,只有使用变量的时候才加$符号

(4) 只读变量

myname="lvyf"
echo "${myname}"
readonly myname
myname="lvyafei"

执行会报错:./first_shell.sh:行8: myname: 只读变量

(5) 删除变量

unset myname
echo ${myname}

不会输出任何东西

(6) 变量类型
  1)局部变量:在脚本或命令中定义,仅在当前shell实例中有效,其它shell不能访问该局部变量
  2)环境变量:所有的程序,包括shell启动程序都要访问环境变量,有些程序需要环境变量保证其正确运行,如在脚本执行启动nginx,那么环境变量必须要有nginx的相关配置
  3)shell变量:是由shell程序设置的特殊变量。有一部分是环境变量有一部分是局部变量,这此变量保证了shell的正常运行。

5. shell字符串,字符串可能用单引号,双引号,也可以不用引号

(1) 单引号
  1)单引号里所有的字符都会原样输出
  2)单引号的变量是无效的如

str1=‘abc‘
str2=‘hello ${str1} ‘
这段会输出 hello ${str1}

3)单引号里面不可有单引号,转义字符单引号(\‘)也不行

(2) 双引号
1)双引号可以有变量
2)双引号可以出现转义字符

str="lvyf"
echo "hello \"${str}\" heheh"
输出:hello "lvyf" heheh

(3) 反引号 ` 1左边的按键

反引号里面包含的一般是命令,给当前正在执行的shell强制插入命令,如:

str="lvyf"
echo "hello \"${str}\" heheh `date`"
date就是获取当前时间的命令,打印:

hello "lvyf" heheh 2016年 07月 25日 星期一 18:22:47 CST

(4) 拼接字符串

your_name="lvyafei"
greeting="hello ${your_name}"
echo ${greeting}

(5) 获取字符串长度

echo ${#greeting} #输出13

(6) 截取字符串
从第1个字符开始,截取5个字符:

echo ${greeting:0:5} #输出hello

6. shell 数组

  1)定义数组
shell中,用括号表示数组,数组元素用空格分开,定义数组的一般形式

arrt_name=(val1 val2 val3)

或者
arry_name=(val1
var2
val3
val4
)

或者
arry_name[0]=val1
arry_name[3]=val3
可以不使用连续的下标,而且下标范围没有限制

  2)读取数组

${arry_name[0]}

使用@读取数组所有的元素

arry[1]=10
arry[3]=20
echo ${arry[@]} # 打印出10 20

  3)获取数组长度

${#arry_name[@]}
${#arry_name[*]}
${#arry_name[n]}

7.shell 注释 ###

8.shell 参数传递

1)$# 传递到脚本的参数个数
2)$* 传递到脚本的所有参数
3)[email protected] 传递到脚本的所有参数
4)$? 显示最后命令的退出状态,0表示没有错误,其它任何数字都表示有问题

5)$$ 脚本运行的当前进程的id号
6)$! 后台运行的最后一个进程的id号
7)$-显示Shell使用的当前选项,与set命令功能相同。

$* 和 [email protected] 的区别
如果传了3个参数 a,b,c ,使用$* 认为就传了一个参数abc 而使用[email protected] 会认为传了3个参数 a , b ,c
时间: 2024-12-11 07:49:53

shell--1.shell 相关及变量的相关文章

shell语法—shell 定义变量及调用变量

可执行文件开头第一行一般我们会指定用什么解释器来执行该文件比如shell脚本的文件开头一般会加#!/bin/sh 运行shell 是会遇到三种变量 1.局部变量,在脚本或命令中定义,仅在当前shell实例中有效,其他shell 启动的程序不能访问局部变量. 2.环境变量,所以的程序,包括shell启动的程序,都能当问环境变量,有些程序需要环境变量来保证其正常运行,必要的时候shell脚本也可以定义环境变量. 3.shell变量,是有shell程序设置的特殊变量,shell变量中有一部分是环境变量

shell脚本中特定符合变量的含义

shell脚本中特定符合变量的含义: $#   传递到脚本的参数个数 $*    以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过9个 $$    脚本运行的当前进程PID号 $!     后台运行的最后一个进程的进程号 [email protected]   与$*相同,但是使用时用双引号,并将各个参数加双引号返回 $-     显示shell使用的当前选项,与set命令功能相同 $_    上一个命令的最后一个参数 $?     显示最后命令的退出状态,0表示执行成功

shell脚本解析3-----局部变量与函数

#!/bin/bash hello="var1" echo $hello function func1                             #定义函数func1 { local hello="var2"                    #定义内部变量hello echo $hello } func1                                          #进行函数调用 echo $hello 执行结果: 总结:局

shell编程(一)---变量

变量是内存空间,通过变量名引用变量的时候,称为命名的内存空间. 定义一个变量,就是给变量分配一段编址的内存空间,给变量赋值,就是往内存空间里面填充数据. 变量类型:事先定义好数据的存储格式和长度.不同的数据类型所占用的存储空间和存储格式也不一样. 变量类型如: 字符类型. 数值类型.分为整型.浮点型 日期和时间型. 布尔型. 逻辑运算:与(and).或(or).非 and:&&    只要有一个为假,结果就为假.只有两者都为真,结果才为真. or:||     只要有一个为真,结果就为真.

学习Shell脚本编程(第4期)_在Shell程序中的使用变量

变量的赋值 变量的访问 变量的输入 4.1 变量的赋值     在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下: 变量名=值  注意: 等号(=)前后没有空格 例如: x=6 a="How are you " 表示把6赋值给变量x,字符串"How are you "赋值给变量a. 4.2 访问变量值 如果要访问变量值,可以在变量前面加一个美元符号"$",例如: [[email protect

小符号反映大问题,Shell中下划线_与变量的关系。

之前写过一个根据日期和时间自动命名文件名的时候遇到一个问题. #! /bin/bash read -p "please input the filename:" filename date3=$(date -d '2 days ago' +%Y%m%d) echo $date3 touch /home/${filename}_${date3} touch /home/$filename"_"$date3 touch /home/"$filename_$da

(转)Shell常用的特殊位置参数变量说明

Shell常用的特殊位置参数变量说明 原文:http://m.blog.itpub.net/15498/viewspace-2151142/ $0    获取当前执行的shell脚本的文件名,如果执行脚本包含了路径,那么就包括脚本路径$n    获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名:如果n大于9,则用大括号括起来,例如${10},接的参数以空格隔开$#    获取当前执行的shell脚本后面接的参数的总个数$*    获取当前shell脚本所有传参

Shell中的特殊位置参数变量全文收录

一.位置参数变量的作用 一句话概括:我们要从命令行.函数或者脚本执行等处传递参数时,就需要在shell脚本中使用位置参数变量 二.Shell中的特殊未知参数变量有哪些 1)$0 作用:获取当前执行的shell脚本的脚本名字(如果脚本中包含了路径,那获取的就是脚本路径)2)$n作用:获取当前执行的shell脚本的第n个参数(n=1..9),当n=0时,则就是$0获取脚本名,当n≥10,则必须使用{},例如:${10},当n有多个时,则参数之间用空格隔开3)$#作用:获取当前执行的shell脚本后面

基本shell脚本的边界及变量

 shell脚本与变量  shell脚本的用途: 自动化常用命令 执行系统管理和故障排除 创建简单的应用程序 处理文本或文件  shell脚本编写格式: 第一行:shebang机制 用#加shell类型开头 后续可直接跟命令,用命令达到需要的效果即可 如需内容注释行首加#即可 例如: #/bin/bash #testcat /etc/passwd  shell脚本执行方法: bash /绝对路径 加入$PATH变量,给脚本文件添加执行权限,然后直接输入脚本文件名即可运行 cat /脚本路径 |