Shell学习笔记

Shell学习笔记

Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。

Shell 有两种执行的方式:
- 交互式:解释执行用户的命令,用户输入一条命令,Shell就执行一条命令。
- 批处理:用户事先写好一个Shell脚本,其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条的敲入。

第一个shell脚本:

  #!/bin/bash   //告诉系统用那一种Shell来执行
    echo "hello world!"

当完成编写后保存文件为.sh文件(建议用vim编写),
第二步:需要修改文件的权限为可执行权限。

chmod +x ./***.sh  //进入到文件所在位置,添加可执行权限
,/***.sh    //执行脚本
sh  ***.sh   //执行脚本

第二个脚本将解释输入:

   #!/bin/bash
    echo "what is you name?"
    read pname    //使用read命令从stdin中读取字符串并且将其赋值给pname
    echo "hello,$pname"
shell中的变量

(1)变量的定义

pname="张三"
url="www.baidu.com"
num=10

shell脚本中定义变量时变量名不需要加($)

(2)变量的使用
使用一个已经定义过的变量需要在变量名前面加上$

name="zhangsan"
echo $name

有些时候为了能够将变量名和字符串分开需要{}来区分

echo "my name is ${name}."

(3)只读变量
shell中支持只读变量的定义。

age=14
readonly age

如果在下文再对age赋值则运行时会出错。

(4)变量的删除

unset variable_name

变量被删除后不能再次使用;但是unset命令不能删除只读变量。
运行shell时,会同时存在三种变量:
1) 局部变量

局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量

所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量

shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

特殊变量列表
变量 含义
0 n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 1 2。
# 传递给脚本或函数的参数个数。* 传递给脚本或函数的所有参数。
@("") * 稍有不同,下面将会讲到。
?退 $ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

shell数组

bash支持一维数组,没有限定数组的大小。用空格区分数组元素

array_name(v1 v2 ...vn)

也可以写成如下形式:

array_name=(
v1
v2
v3
v4
)
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}
shell if-else语句

与C语言相比shell中的if-else中添加了then,then后面的语句将会被执行,此外每一个if还必须要一个fi来闭合如:

#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
   echo "a is equal to b"
fi
if [ $a != $b ]
then
   echo "a is not equal to b"
fi

同理if-else语句也一样:

#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

if … elif … fi 语句

#!/bin/sh
a=10
b=20
if [ $a == $b ]
then
   echo "a is equal to b"
elif [ $a -gt $b ]
then
   echo "a is greater than b"
elif [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "None of the condition met"
fi
shell中的case-esac

case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构。
用法如下:

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   //与if语句相似,需要用esac语句将其闭合
shell中的for循环

shell中的for循环格式为:

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

显示主目录下.bash开头的文件:

#!/bin/bash
for FILE in $HOME/.bash*
do
   echo $FILE
done
shell- while循环
COUNTER=0
while [ $COUNTER -lt 5 ]
do
    COUNTER='expr $COUNTER+1'
    echo $COUNTER
done
shell中的until循环
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值