linux shell 脚本详解

. Linux  shell 脚本编写基础
◆1.1 语法基本介绍
1.1.1 开头

程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
要使脚本可执行:
编译 chmod +x filename 这样才能用./filename 来运行
1.1.2 注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。
如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
1.1.3 变量

在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:

复制代码代码如下:


#!/bin/sh 
#对变量赋值: 
a=”hello world” 
# 现在打印变量a的内容: 
echo “A is:” 
echo $a


有时候变量名很容易与其他文字混淆,比如:

复制代码代码如下:


num=2 
echo “this is the $numnd”

这并不会打印出“this is the 2nd”,而仅仅打印”this is the “,因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:

复制代码代码如下:


num=2 
echo “this is the ${num}nd”


这将打印: this is the 2nd
1.1.4 环境变量
export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。

这一讲就介绍到这里,下面我们会接触到具体的Linux shell脚本基础的实质部分。

 

 

必须要要知道几个变量,

复制代码代码如下:


   *    $0 :即命令本身,相当于c/c++中的argv[0]
    *    $1 :第一个参数.
    *    $2, $3, $4 … :第2、3、4个参数,依次类推。
    *    $#  参数的个数,不包括命令本身
    *    $@ :参数本身的列表,也不包括命令本身
    *    $* :和$@相同,但”$*” 和 “$@”(加引号)并不同,”$*”将所有的参数解释成一个字符串,而”$@”是一个参数数组。


手工处理方式能满足多数的简单需求,配合shift使用也能构造出强大的功能,但处理复杂选项时建议用下面的两种方法。
例子,(getargs.sh):

复制代码代码如下:


#!/bin/bash
if [ $# -lt 1 ]; then
    echo “error.. need args”
    exit 1
fi
echo “commond is $0”
echo “args are:”
for arg in “$@”
do
    echo $arg
done


运行命令:

复制代码代码如下:


./getargs.sh 11 22 cc
commond is ./getargs.sh
args are:
11
22
cc

 

 ”>, >>, 2>, 2>> :前面讲过重定向符号> 以及>> 分别表示取代和追加的意思,然后还有两个符号就是这里的2> 和 2>> 分别表示错误重定向和错误追加重定向,当我们运行一个命令报错时,报错信息会输出到当前的屏幕,如果想重定向到一个文本里,则要用2>或者2>>。

 linux shell 脚本详解

[ ] ”:中括号,中间为字符组合,代表中间字符中的任意一个

 linux shell 脚本详解

&& 与 ||

在上面刚刚提到了分号,用于多条命令间的分隔符。另外还有两个可以用于多条命令中间的特殊符号,那就是 “&&”和”||”。下面笔者把这几种情况全列出:

1) command1 ; command2

2) command1 && command2

3) command1 || command2

使用”;”时,不管command1是否执行成功都会执行command2; 使用”&&”时,只有command1执行成功后,command2才会执行,否则command2不执行;使用”||”时,command1执行成功后command2 不执行,否则去执行command2,总之command1和command2总有一条命令会执行。

linux shell 脚本详解 

 

 

 

 

原创文章,作者:linux-qiao,如若转载,请注明出处:http://www.178linux.com/83818

(0)
linux-qiaolinux-qiao
上一篇 2017-08-05
下一篇 2017-08-05

相关推荐

  • Mariadb之SELECT语法练习

    一 、导入hellodb.sql生成数据库后实现以下操作     # mysql -uroot -h172.16.23.23 -pcento.123 < hellodb.sql     mysql>&nbsp…

    Linux干货 2016-12-17
  • N21-天天-第九周课程练习

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash awk -F: '$NF~"/sbin/nologin" {shell++} $NF!~&qu…

    Linux干货 2016-09-01
  • iptables实验3 关于内网外网的地址转换及端口转换

    地址属于内核,而不属于网卡!!!!     网络防火墙的实现(主要是forward链) 172.16.100.68(A)和172.16.100.67(B) 192.168.12.10(B)和192.168.12.77(C)(VNET2) B作为C的网关   配置B主机的网卡一个为192.168.1.72,另一个为172.16.2…

    Linux干货 2016-10-30
  • 第六周小练习

    详细总结vim编辑器的使用并完成一下练习 vim编辑器的基本使用 vim模式: 1、编辑模式(命令模式) 2、输入模式 3、末行模式  一、打开文件 vim /path/to/somefile 打开单个文件 如果文件存在为打开,否则保存退出时为新建 vim /path/to/somefile vim +# : 打开文件…

    Linux干货 2016-12-19
  • Linux的自动化安装实现

    在介绍自动化安装系统之前让我们来回顾一下系统的启动流程,系统的启动大概分为一下几个步骤:加电自检 boot sequence(mbr)— boot loader –>kernel(initramfs)—>rootfs  /sbin/init大概就是这么几个过程了,接下来来介绍系统的安装,安装系统虽然看起来简单,普…

    系统运维 2016-09-19
  • 马哥教育网络班22期+第5周课程练习

    1、显示当前系统上root、fedora或user1用户的默认shell;cat /etc/passwd | grep "^\<root\>"cat /etc/passwd | grep "^\<fedora\>"cat /etc/passwd | grep "^\<user1\…

    Linux干货 2016-09-19