Shell笔记

Shell笔记

记录shell的常用语句

1. 基本变量使用

#!/bin/bash
a="Hello World"  # 变量定义,等号后面不能加空格
echo $a  # 使用变量
a="Hi"
echo "${a} World"  # 使用变量时可以加上{}来避免歧义

# for循环
for skill in Ada Colle Action Java; do
    echo "I am good at ${skill}Script"
done

# 删除变量
unset a
echo $a

word="2333"
# 单引号字符串,完全原样输出
echo 'Hello World ${word}'
# 双引号允许加转义和变量
echo "Hello World \"${word}\"!"

#字符串长度
str="abcd"
echo "${#str} chars"

#提取子字符串
str="google is a great enterprise"
echo ${str:2:5}

# 查找子字符串(使用``可以执行shell命令)
echo `expr index "$str" is` # 8

# 数组
array=(value0 value1 value2 value3)
echo ${array[0]} ${array[2]} ${array[3]}
echo ${array[@]} # 表示全部
size=${#array[@]} # 数组个数,用法和字符串一致
echo ${size}

# 多行注释
:<<EOF
注释内容...
注释内容...
注释内容...
EOF

输出结果:

Hello World
Hi World
I am good at AdaScript
I am good at ColleScript
I am good at ActionScript
I am good at JavaScript

Hello World ${word}
Hello World "2333"!
4 chars
ogle
8
value0 value2 value3
value0 value1 value2 value3
4

2. 参数传递

para.sh

#!/bin/bash
echo "执行的文件名:$0"
echo "传递的参数作为一个字符串显示:$#"
echo "所有参数:$@"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"

命令行运行

➜  Sh ./para.sh 1 2 ok
执行的文件名:./para.sh
传递到脚本的参数个数:3
传递到脚本的参数个数:1 2 ok
第一个参数:1
第二个参数:2
第三个参数:ok

3. 基本运算符

#!/bin/bash

# 算术运算
a=10
b=20
echo "a + b = `expr $a + $b`"
echo "a * b = `expr $a \* $b`"
if [ $a == $b ]
then
    echo "a == b"
else
    echo "a != b"
fi

# 关系运算
if [ $a -gt $b ]
then
   echo "$a -gt $b: a > b"
fi
if [ $a -lt $b ]
then
   echo "$a -lt $b: a < b"
fi
if [ $a -eq $b ]
then
   echo "$a -eq $b : a = b"
fi

# 逻辑运算
if [[ $a -lt 100 && $b -gt 100 ]]
then
   echo "a < 100 && b > 100"
fi

if [[ $a -lt 100 || $b -gt 100 ]]
then
   echo "a < 100 || b > 100"
fi

# 字符串
a="abc"
b="efg"
if [ $a = $b ]
then
    echo "string a = string b"
else
    echo "string a != string b"
fi

if [ $a ]
then
   echo "$ab : 字符串不为空"  # 也就是未定义
else 
   echo "$a : 字符串为空"
fi

# 文件测试
file = "operator.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

运行输出

a + b = 30
a * b = 200
a != b
10 -lt 20: a < b
a < 100 || b > 100
string a != string b
 : 字符串不为空
文件可读
文件可写
文件不可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在

4. 流程控制

#!/bin/bash

# if语句
a=10
b=20
if [ $a -gt $b ]
then 
    echo "a > b"
elif [ $a -eq $b ]
then
    echo "a == b"
else
    echo "a < b"
    echo "2333"  # 每一块可以执行多条语句
fi

# case语句
echo '输入1到3之间的数字'
echo '你输入的数字为:'
read aNum  # read命令从终端读取输入
case $aNum in 
    1)  echo '你输入了1'
    ;;
    2)  echo '你输入了2'
    ;;
    3)  echo '你输入了3'
    ;;
    *)  echo '你输入了其他数'
    ;;
esac

# for循环
for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

# whil循环
a=1
while(($a<=7))
do
    echo $a
    let "a=a+2"  # bash的命令
    if [ $a = 5 ]
    then
        break
    fi
done

运行输出

a < b
2333
输入1到3之间的数字
你输入的数字为:
4
你输入了其他数
The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5
1
3

5. 函数

#!/bin/bash

sum() {
    s=0
    for num in $@
    do
        s=$(($s+$num))
    done
    return $s
}
result=$(sum 1 2 3)
echo $?

运行结果

6

比较常用的命令都在了,更复杂的场景感觉还是用python之类的合适一点

posted @ 2018-10-11 11:16  潇雨危栏  阅读(191)  评论(0编辑  收藏  举报