shell 学习笔记

  • Simon 发布于 2017-02-27
  • 栏目: linux
  • 2083人围观
  • 0评论

第一行通常指定脚本用什么解析器来执行

#!/bin/bash  或者 #!/bin/sh


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


运行方式

1. 直接运行

./test.sh

2. 文件名作为解释器参数

/bin/bash test.sh


test.sh和./test.sh运行的区别:

test.sh的话 系统会去PATH目录里去找这个命令,肯定是找不到的

./test.sh 告诉系统 就在当前目录找test.sh


注释

#


变量

定义变量

youname="simon"

变量名和等号之间不能有空格

使用变量

$youname

删除变量

unset youname

只读变量

readonly youname



字符串

单双引号的使用规则 类似PHP

双引号中可以使用{}将变量与字符串区分开来

echo "hello  ${youname}hahaha"


拼接字符串

youname="simon"

echo "hello"$youname"!"

echo "hello " $youname "!"

echo "hello ${youname}!"


字符串长度

youname="simon"

echo ${#youname} 输出5


截取字符串

youname="simon"

echo ${youname:1:4} 输出imon 下标从0开始


查找字符串

youname="simon"

echo `expr index "$youname" i` 输出2 下标从1开始


判断字符串是否包含另一字符串

str='hello world'

word='world'

if [[ $str == *$word* ]]

then

#包含

else

#不包含

fi


数组

下标从0开始

元素用空格隔开

arrayname=(v1 v2 v3)

arrayname[0]=v1

读取

${arrayname[0]}

读取所有元素

${arrayname[@]}

获取元素个数

${#arrayname[@]}


传递参数

./test.sh a b c

echo $0 输出当前文件名

echo $1  输出a

echo $2  输出b

echo $3  输出c

echo $# 输出当前传递的参数个数



接收用户输入

使用read命令接收输入

echo -n "who are you ?"

read name

echo $name;


基本运算

bash不支持数学运算,需要借助awk及expr命令实现

echo `expr 2 + 2`

条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。


逻辑判断

---------- if ----------

if [ $a == $b ]

then

#todo

fi

---------- if else ----------

if [ $a -gt 0]

then

echo '$a > 0'

else

echo '$a < 0'

fi

---------- if elseif ----------

if [ $a -gt 0 ]

then

echo '$a > 0'

elif

then

#todo

else

#todo

fi


是否是文件夹

if [ -d $file ]

是否是文件

if [ -f $file ]

检测字符串长度是否为0

if [ -z $str ]

检测字符串长度是否不为0

if [ -n $str ]

检测字符串是否不为空

if [ $str ]


转载请说明出处: Simon的PHP技术博客 » shell 学习笔记
标签: shelllinux

评论

  • andy.deng (2017-09-22 18:03:04) 说:
    不错不错