执行
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:空白