shell-基础语法

shell介绍

linux shell是一种命令行解释器,它允许用户通过命令行界面与操作系统进行交互

shell提供了基本的命令执行,变量,条件判断,循环,函数,处理逻辑操作等语法,使得用户可以通过编写脚本自动化执行一系列命令.

执行.sh文件的常用方法

1)bash a.sh

2)sh a.sh

3)source a.sh

4)bash < a.sh  或者 sh < a.sh

5)赋予可执行权限 直接运行   chmod +x a.sh

shell脚本变量的分类

1)环境变量

  环境变量是在shell启动时由操作系统设置的,他们对于所有的shell和shell执行的程序都是可见的

  $HOME,$PWD,$SHELL,$USER

2)特殊变量(系统预定义变量)

  特殊变量是由shell程序预定义的,用于存储一些特定的值或状态

  例如:$?用于存储上一个命令的返回值,$$用于存储当前shell进程的pid,$IFS用于存储当前shell的字段分隔符等。

$?:记录最后一条命令的执行状态。0 表示命令执行成功而且有结果
$#:传递参数的个数
$*和$@:取出所有的传递参数
$$:当前进程的进程PID
$$:当前脚本或进程的进程ID。
$?:上一个命令或脚本的退出状态码。 0 表示命令执行成功而且有结果
$!:上一个后台进程的进程ID。
$USER:当前用户的用户名。
$HOME:当前用户的主目录路径。
$PATH:当前系统的执行路径。
$PWD:当前工作目录路径。
$SHELL:当前使用的Shell程序路径。
$RANDOM:一个0到32767之间的随机数。
$LINENO:当前脚本的行号。
$IFS:当前脚本的字段分隔符。
$PS1:Shell提示符的格式。
$PS2:Shell续行提示符的格式

3)位置参数变量(传参)

  位置参数变量是用来存储shell脚本的命令行参数的,他们包括$1,$2,$3等。例如,如果我们运行一个shell脚本并且传递两个参数,那么这两个参数会被分别赋值给$1和$2

4)用户自定义变量:用户自己定义的变量(常量,变量)

  本地变量由shell程序定义的,仅在当前shell会话中可见,对于其他的shell和shell执行的程序是不可见的.

本地变量可以通过=符号来定义和赋值,例如myvar='hello'.

删除变量

unset 变量名

不能删除只读变量

变量和常量的区别:

常量赋值后,常驻当前会话,不可重新赋值.变量可以重新赋值.

常量不可以使用unset删除,变量可以使用unset删除

本地变量只在当前shell会话中可见,对于其他的shell和shell执行的程序是不可见的

单引号和双引号的区别:

单引号,引号内的内容原样输出(当做是一个字符串来处理)

双引号,引号内的内容,如果有变量,执行后再输出,通过$符号引用出来.

反引号 ``在里面执行linux命令

b=`pwd`

$():获取linux命令的执行的结果

${}叠加变量

{}大括号

1)扩展

  对括号中的文件名进行扩展,以逗号分割的文件列表进行扩展,还有.分割的顺序文件列表起扩展作用

2)代码块,又被成为内部组

这个结构事实上创建了一个匿名函数,与$()中的命令不同,{}内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内的变量,大括号内的命令用分号隔开,第一个命令与左大括号之间必须要有一个空格,相对于sql里面的子查询

IF语句-条件判断

基本语法

if [ 布尔类型 ];then  ##注意判断的前后需要增加空格

  commands

elif [ 布尔类型 ];then

  commands

else

  commands

比较类型:数值类型,字符串类型,文件比较

1)数值类型

-eq     等于则为真    [ “$a” -eq “$b” ]
-ne    不等于则为真    [ “$a” -ne “$b” ]
-gt    大于则为真    [ “$a” -gt “$b” ]
-ge    大于等于则为真    [ “$a” -ge “$b” ]
-lt       小于则为真    [ “$a” -lt “$b” ]
-le    小于等于则为真    [ “$a” -le “$b” ]

2)字符串比较
==    等于则为真    [ “$a” == “$b” ]
!=    不相等则为真  <>    [ “$a” != “$b” ]
-z 字符串.    字符串的长度为零则为真    [ -z “$a” ]
-n 字符串    字符串的长度不为空则为真    [ -n “$a” ]
str1 > str2    str1大于str2为真    [ str1 \> str2 ]
str1 < str2    str1小于str2为真    [ str1 \< str2 ]

3)文件比较

-e 文件名.    如果文件或目录存在则为真    [ -e file ]
-r 文件名.    如果文件存在且可读则为真    [ -r file ]
-w 文件名.    如果文件存在且可写则为真    [ -w file ]
-x 文件名.    如果文件存在且可执行则为真    [ -x file ]
-s 文件名    如果文件存在且至少有一个字符则为真    [ -s file ]   --判断空文件的用法
-d 文件名.    如果文件存在且为目录则为真(判断目录是否存在)    [ -d file ] --判断目录
-f 文件名.    如果文件存在且为普通文件则为真    [ -f file ]
-c 文件名.    如果文件存在且为字符型文件则为真    [ -c file ]
-b 文件名..    如果文件存在且为块特殊文件则为真    [ -b file ]
file1 -nt fle2    检查file1是否比file2新    [ file1 -nt file2 ]  --根据日期来判断
file1 -ot file2    检查file1是否比file2旧    [ file1 -ot file2 ]
 

case分支判断

case $变量名 in   #必须要转行符号
  "值1") 
    如果变量的值等于值1,则执行程序1 
    ;; 
  "值2") 
    如果变量的值等于值2,则执行程序2 
    ;; 
  …省略其他分支… 
  *) 
    如果变量的值都不是以上的值,则执行此程序 
    ;; 
esac

【注意事项】
case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
双分号“;;”表示命令序列结束,相当于java中的break。
最后的“*)”表示默认模式,相当于java中的default。

FOR循环

基本语法1

for (( 初始值;循环控制条件(结束的标志);变量变化 ))    --第一行
 do      --第二行
    程序体 (多条命令)
    
done  --最后一行done代替结束。 

基本语法2

for 变量 in 值1 值2 值3…     --每个值之间以空格隔开,如果带空格的字符串需要用'' 来括着
  do 
    程序 
  done

变体

for 变量 in 数组    ##in 后面可以放数组或者集合
  do 
    程序 
  done

for区分  $*与$@  $i

两者相同:获取所有的参数

两者不同:$*把取回所有数据当做一个整体处理 'a b'

$@把取回所有数据当做一个一个的个体来处理 a b

%i显示具体的值

WHILE循环

基本语法:

while  [ 条件判断式 ]    ##注意点:[] 里面 条件判断式前后要加空格
  do 
    程序体
    累加器
  done

continue:跳出当前这次循环继续下次循环

break:退出循环

shell-数组

自定义变量与数组有什么区别:

数组:存储一组数据  array=('a' 'b' 'c' 'd')

变量:是独立一个数据  var='a'

数组的取值

${}

1)按下表来取值:${数组名[下标]}  数组的下标从0开始

2)取出所有的值:${数组名[@]}或者 ${数组名[*]}

注意:*取出的值当成一个整体处理,@取出的值当成一个一个的个体处理

3)取出数组有几个值:  ${#数组名[@]}或${#数组名[*]}

4)取出某个值的长度的字节数: ${#数组名[下标]}

数组的遍历

1)通过下标和for循环遍历

2)通过for i in 遍历数组

shell-函数

格式1:


function 函数名 {    
 commands 

 }
 
注意:{前面与函数名之间一定要有空格
     {和}之间一定要分成多行来书写

格式2

 在另外的shell文件引用到主文件的调用程序中的。(!!常用的格式!!!)

函数名(){

      commands
}

# 使用 source 命令导入函数  
source ./function.sh  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值