[Notes] Shell 语法

执行

1. 直接在shell命令行中输入shell 命令,但是此时只能输入一行;

2. 创建xxx.sh文件,在其中写入文件,限定文件的权限为可执行

# 令文件有可执行权限
chmod +x xxx.sh
# 执行
./xxx.sh
# 执行
bash xxx.sh

3. 查看脚本文件中是否有语法错误

bash -n xxx.sh

4. 跟踪执行 

bash -x xxx.sh

  

约定标记

# !/bin/bash

# date & author

echo "Hi!"
  • #!是一个约定标记,告知系统本脚本采用哪个解释器。
  • #是单纯的注释标记
  • $?表示变数,是前一个指令完毕后的返回值。在 Linux 返回值为 0 代表执行成功
  • &&和||
指令下達情況 說明
cmd1 && cmd2 1. 若 cmd1 執行完畢且正確執行($?=0),則開始執行 cmd2。
2. 若 cmd1 執行完畢且為錯誤 ($?≠0),則 cmd2 不執行。
cmd1 || cmd2 1. 若 cmd1 執行完畢且正確執行($?=0),則 cmd2 不執行。
2. 若 cmd1 執行完畢且為錯誤 ($?≠0),則開始執行 cmd2。
  • >和>>,表示输出的重定向,分别是“替换”和“累加”的功能。

  • <和<<,表示输入的重定向,特别的是<是将右侧的内容通过标准输入的方式输入到左侧;而<<则是指定,左侧的在接受标准输入的过程中,如果遇到了右侧的显示的字符,则终止输入。
  • <<<表示右侧是一个字符串输入,其中的单词会一个一个输入左侧.
cat <<< 'hi there'
#output:hi there
  • "和', ""中的变量是显示变量的值,而''中的变量不显示变量中统统作为字符串

括号

{}的使用

1. 配合$,用来明确变量名的可识别度,例如:

aa='hahah'
echo ${aa}_is
# output: hahah_is

2. 可以用来对一串命令进行执行,这些命令在当前shell中执行,所以在内部修改外部定义的变量是有效的;此时,{}中第一个命令和{之间必须有空格,结束必须有‘;’

()的使用

1. 和{}一样可以用来对一串命令进行执行,但是这些命令会在子shell中执行,即内部的复制不会影响()外面的变量。

 2. $(指令)的功能和`指令`的功能是一样的,例如$(uname -r)和`uname -r`

[]的使用和test命令简述

shell中的test命令可以产生各种退出状态,bash中[和test命令的作用是一样,并且[与表达式之间需要空格

test命令有三类:字符串比较、算术比较和与文件有关的条件测试。特别注意,对于数字而言,因为shell的弱类型定义方式,它既可以表示为数值型,也可以表示为字符串型,这会导致不同比较方式的结果有些不同。

1. 字符串比较和[]例子

string1 = string2  :如果两个字符串相同则为真

string1 != string2 :如果两个字符串不同则结果为真

-n string :如果字符串不为空则结果为真

-z string :如果字符串为空(null),则结果为真

# 使用test命令
if test "$str1" = "$str2" ; then
fi

# 使用[命令, [与表达式之间要有空格
if [ "$str1" != "$str2" ] ; then
fi

  

2. 算术比较和[]例子

exp1 -eq exp2 :如果两个表达式相等,为真

exp1 -ne exp2 :如果两个表达式不等,为真

exp1 -gt exp2 :如果exp1>exp2,为真

exp1 -ge exp2 :如果exp1>=exp2,为真

exp1 -lt exp2 :如果exp1<exp2,为真

exp1 -le exp2 :如果exp1<=exp2,为真

!exp :如果exp为假,返回真

if [ $num1 -eq $num2] ; then
fi

  

对于数字而言,因为shell的弱类型定义方式,它既可以表示为数值型,也可以表示为字符串型,这会导致不同比较方式的结果有些不同。

val1="1"
val2="001"

# 字符串比较,返回值1,两个字符串不等
[ "$val1" = "$val2"] 
echo $?

# 数值比较,返回值0,两个数值相等
[ "$val1" -eq "$val2" ]
echo $?

  

3. 文件比较和[]例子

-d file :如果file是目录,返回真

-e file :如果文件存在,返回真;注意这个和-f重合度高,且因为历史原因,常用-f

-f file :如果文件存,返回真

-g file :如果文件的set-group-id为被设置,则结果为真;set-group-id是文件权限设置中的一个位,当文件的set-group-ID位被设置时,在许可权限部分,组用户的x被替换成s,

-r file : 如果文件刻度,则为真

-s file :如果文件的set-user-id被设置,则为真

-w file : 如果文件可写,则为真

-x file :如果文件可执行,则为真

if [ -f /bin/bash ] ; then
fi

  

 变量使用

使用

${var_name}
$var_name

  引用变量值

变量赋值

#注意等号两侧不能有空格
variable=value

变量可以直接在字符串中使用,可以使用{}来使得变量更易被解释器识别

str="hi"
echo "I say $str" 

unset删除变量

aaaa=111
echo $aaaa
#output: 111
unset aaaa
echo $aaaa
#output:空白

  

 

posted @ 2019-07-24 14:43  虚无真仙  阅读(231)  评论(0编辑  收藏  举报