这个是相当相当基础的。这个只是想要完成一点小的工作量的东西写的,所以仅仅是对语法进行梳理和一部分的理解
第一个shell程序,新建一个.sh结尾的文件
echo 'hello world!'
将以上代码保存在test.sh文件中,打开命令行,执行一下程序就可以看到执行结果了
sudo chmod +x ./test.sh # 使脚本具有执行权限
./test.sh # 执行脚本
变量
name="karyn" # 声明变量。不要把空格的习惯带进来。
age=10 # 声明变量。不要把空格的习惯带进来。
unset name # 删除变量
readonly age # 只读变量
echo $name # 读取变量
echo ${age}
特殊变量
| 变量 | 含义 |
| $0 | 当前脚本的文件名 |
| $n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
| $# | 传递给脚本或函数的参数个数。 |
| $* | 传递给脚本或函数的所有参数。 |
| $@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。 |
| $? | 上个命令的退出状态,或函数的返回值。 |
| $$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
输入脚本:
echo "File Name: $0"
echo "First Parameter : $1"
echo "First Parameter : $2"
echo "Quoted Values: $@"
echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
执行./test.sh karyn song
输出结果:
File Name: ./test.sh
First Parameter : karyn
First Parameter : song
Quoted Values: karyn song
Quoted Values: karyn song
Total Number of Parameters : 2
运算
a=10
b=20
| 运算符 | 说明 | 举例 |
| + | 加法 | `expr $a + $b` 结果为 30。 |
| - | 减法 | `expr $a - $b` 结果为 10。 |
| * | 乘法 | `expr $a \* $b` 结果为 200。 |
| / | 除法 | `expr $b / $a` 结果为 2。 |
| % | 求余 | `expr $b % $a` 结果为 0。 |
| = | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
| == | 相等 | [ $a == $b ] 返回 false。 |
| != | 不相等 | [ $a != $b ] 返回 true。 |
| 运算符 | 说明 | 举例 |
| -eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 true。 |
| -ne | 检测两个数是否相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
| -gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
| -lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
| -ge | 检测左边的数是否大等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
| -le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
字符串
获取字符串长度
string="abcd"
echo ${#string} # 输出 4
提取子字符串
string="my name is karyn"
echo ${string:3:4} # 从字符串第1个开始截取长度为4的字符串,输出name
数组
多种声明方式,这里就说一种
array_name=(1 2 3 4)
# 取得数组元素的个数
length=${#array_name[@]}
echo $length
# 或者
length=${#array_name[*]}
echo $length
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
echo $length
输出
一般都用echo,将显示结果重定向至文件
echo "It is a test" > result.txt # 输出重定向到 result.txt 文件中
echo "It is a test" >> result.txt # 输出重定向追加到 result.txt 文件中
if else 语句
if [ $a == $b ]
then
echo "a is equal to b"
else
echo "a is not equal to b"
fi
case ... esac
echo 'Input a number between 1 to 4'
echo 'Your number is:\c'
read aNum
case $aNum in
1) echo 'You select 1'
;;
2) echo 'You select 2'
;;
3) echo 'You select 3'
;;
4) echo 'You select 4'
;;
*) echo 'You do not select a number between 1 to 4'
;;
esac
for循环
for str in 'This is a string'
do
echo $str
done
while循环
a=0
while [ $a -lt 5 ]
do
a=`expr $a + 1`
echo $a
done
until循环
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done