shell 初体验

博客分类: 原创

shell 初体验

这个是相当相当基础的。这个只是想要完成一点小的工作量的东西写的,所以仅仅是对语法进行梳理和一部分的理解

第一个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