Shell语言基础命令

新建一个test.sh文件

输入

#!/bin/bash
echo “Hello World !”
#运行Shell脚本

chmod +x ./test.sh # 使脚本具有可执行权限
./test.sh #执行脚本

注:test.sh 直接写 unix-like 系统或去Path 里寻找有没有叫做test.sh的文件 通常只有/bin,/sbin,/usr/bin,/usr/sbin在Path中, ./test.sh告诉系统在当前目录下寻找

变量

定义变量
your_name=“GreenDan”
命名规则跟其他的语言基本相似
使用变量 :在前面加一个$符号

your_name="GreenDan"
echo $your_name
# 加花括号是为了分清便捷
echo ${your_name}

shell
只读变量 readonly
readonly your_name
删除变量 unset 命令
unset your_name

变量类型

  1. 局部变量
    局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量
  2. 环境变量
    所有的程序,包括shell启动的程序,都能访问的环境变量,有些程序需要环境变量来保证其正常运行,必要的时候shell脚本也可以定义环境变量
  3. shell变量
    shell变量有shell程序设置的特殊变量,shell变量中有一部分是环境变量,一部分是局部变量,这些变量保证了shell的正常运行

shell 字符串

字符串可以用单引号,双引号也可以不用引号,单双引号的区别跟其php类似

  • 单引号字符串的限制

单引号里的任何字符都会原样输出,单引号中定义字符串是无效的。
单引号字串不能出现单独的一个单引号(使用转义字符也不行)但可以成对出现,用于拼接字符串

  • 双引号的优点

双引号里可以有变量
双引号中可以出现转义字符
获取字符串的长度
echo ${#string}
提取子串
echo ${string :1:4}

shell获取数组的长度

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

shell 注释
以#号为注释,没加一行就多一个注释

多行注释可以定义成函数的形式来注释

:<<EOF
注释内容
EOF

Shell 参数传递
用$n 来传参,n代表数字,0代表文件名,1代表第一个参数,以此类推

   #!/bin/bash
   #author:GreenDan
   echo "shell 传参实例";
   echo "执行的文件名:$0";
   echo "第一个参数:$1";
  echo "第二个参数:$2";
  echo "第三个参数:$3";
chmod +x 传参.sh
./传参.sh 1 2 3

几个特殊字符来处理参数

参数 实现功能
$# 显示传递到脚本的参数个数
$* 显示所有的参数,比如用 “$*”, 在双引号中输出所有的参数 “$1 $2 $n”
$$ 显示脚本运行的当前进程的ID号
$! 后台运行的最后一个进程的ID号
$@ 与$*相同 区别在于"$1" “$2” “$3” “$4”
$? 显示最后命令的退出状态,0表示没有错误,其他值表示有错误

echo 命令

1.显示普通字符串
2.显示转移字符串
3.显示变量
4.显示换行
5.显示不换行
6.显示结果定向的文件
7.原样输出字符串,不进行转义或取变量(用单引号)
8.显示命令结果

test命令

数值测试

参数 说明
-eq 等于则为真
-ne 不等于则为真
-gt 大于则为真
-ge 大于等于则为真
-lt 小于则为真
-le 小于等于则为真

字符串测试

|参数|说明|

|:-?:-?
|=|等于则为真|
|!=|不等于则为真|
|-z 字符串|字符串长度为零则为真|
|-n 字符串|字符串长度不为零为真|

文件测试

|参数|说明|
|:-?:-:]
|-e 文件名| 文件存在为真|
|-r 文件名|文件存在且可读为真|
|-w 文件名|文件存在且可写为真|
|-x 文件名|文件存在且可执行为真|
|-s 文件名|文件存在且至少有一个字符串为真|
|-d 文件名|如果文件存在期望为目录则为真|
|-f 文件名| 如果文件存在且为普通文件则为真|
|-c 文件名|如果文件存在且为字符型特殊文件则为真|
|-b 文件名|如果文件存在且为快特殊文件则为真|

流程控制

if-elif-else语句

if  [ $a == $b]
then 
    echo "if"
elif [$a -gt $b]
then 
    echo "elif"
else
    echo "else"
fi

for 语句

for var in items
do 
    commands
done

while

where ((something))
do
    commands
done

无限循环

while :
do 
    commands
done

或者

while true :
do
    commands
done

或者

for(( ; ; ))

until循环
循环执行一条命令知道为true为止,与while相反

until condition
do 
    commands
done

case
为多选择语句

case value in 
value1)
    commands
    ;;
value2)
    commands
    ;;
    *)
esac

*)相当于default
break 与continue
与其他语言的一致
break跳出整个循环,continue,跳出当前循环,继续执行循环
case的语法和C family语言差别很大,它需要一个esac(就是case反过来)作为结束标记,每个case分支用右圆括号,用两个分号表示break。

Shell 文件包含

. filename 
或
source filename

你可能感兴趣的:(WEB后端)