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之类的合适一点