例1: 用vi编辑文件echodate输出系统日期
# vi echodate
#%Y
#%m
#%d
echo `date +%Y%m%d`
保存并退出。
# sh ./echodate
20160125
或者
# chmod 755 echodate
# ./echodate
20160125
--------------------------------------------------------------------------------------------------------------------
PS1: 主命令提示符。用户可根据需要自行定义。
PS2: 二级命令提示符。命令执行过程中要求输入数据时用。
LD_LIBRARY_PATH: 寻找动态链接库的路径。如果存在多个路径,路径间用冒号分隔。
用户自定义PS1环境变量举例:
\d 显示当前日期
\h 显示主机名
\t 显示当前时间
\u 显示当前用户的用户名
\w 显示当前工作目录的路径
把提示符格式修改为: "[主机名-用户名][工作目录]>"的形式
export PS1="[\h-\u][\w]" #这个是临时性的
# vi /etc/profile 或者 vi .bash_profile
加入export PS1="[\h-\u][\w]"这句
# source /etc/profile 或者 source .bash_profile
---------------------------------------------------------------------------------------------------------------------
管道是将一个命令的输出作为另一个命令的输入。
例: 要统计当前目录下文件的数量可以用下述命令实现:
# ls|wc -l # ls是显示列表命令,wc是统计命令,|是管道的符号,这条命令表示wc统计ls的输出信息。
重定向技术可以将输入或输出重新定向到指定的目标,如某个文件或打印机等。
>: 重定向,如果是重定向至文件,则目标文件被覆盖。
>>: 重定向,如果是重定向至文件,则将在目标文件的尾部追加。
# cat 文件名称>/opt/a.txt
<: 输入重定向。
<<: 也称为here文档操作符。它通知shell当前运行的命令的输入来自命令行。<<操作符后面的输入用一个分隔符开始,用同样的另外一个分隔符结束。两个分隔符间的内容就是要执行的命令的输入。例如,要统计一段文字单次的数量,如下所示:
wc<<delim
This is a test program!
This is the second line.
delim
创建一个shell脚本autoftp,实现自动登录ftp服务器并下载某文件。其实现过程如下:
# vi autoftp
ftp -n 192.168.1.10<<!
user abc password
get $1
bye
!
保存并退出。
【代码解析】在本例中,通过执行非交互模式(-n选项)的ftp,使用输入重定向符<<,实现了自动登录ftp服务器并下载指定文件的功能。源码的各行解释如下。
第一行:执行非交互模式的ftp,通过<<指定ftp的输入来自于后续的文本。
第二行:自动输入ftp服务器的用户名和密码。
第三行:调用ftp的get命令从服务器获取指定的文件。
第四行:关于与ftp服务器的连接。
第五行:重定向的第二个分隔符,注意该符号应该从下一个新行开始。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
shell变量的使用:
类型: 环境变量、用户自定义变量、系统全局变量。
系统全局变量代表了特定的含义,不能为用户所修改,主要的全局变量包括以下3个:
$#: 执行shell脚本时的命令行参数个数,不包括脚本本身
$?: 执行上一条shell命令的返回值
$0: shell脚本程序自身的名称
变量定义格式如下:
变量名称=变量初始值(注意等号两边不能够有空格)
在用户定义自己的变量时,要遵循以下命名规则。
1、首个字母必须为字母(a~z、A~Z)
2、中间不能有空格,可以使用下划线
3、不能使用标点符号
4、不能使用shell里的关键字(可执行help命令查看保留关键字)
要在脚本程序中使用变量,则通过"$变量名称"的方式进行。即在变量的前面加$符号。另外,在shell编程中存在一种称为位置变量的变量。这种变量类似于C语言编程中的命令行参数,它代表了执行shell程序时的命令行参数。要在shell脚本中引用这些位置变量,通过$0,$1,$2,...的方式进行。其中,$0代表shell命令程序本身,而$1代表shell命令行的第一个参数,$2代表第二个参数,以此类推。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
shell批处理:
# vi test.sh
程序必须以下面的行开始(必须放在文件的第一行)
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
能执行普通的命令。
例如:
#!/bin/bash
# shutdown pc
sudo shutdown +1
# vi echodate
#%Y
#%m
#%d
echo `date +%Y%m%d`
保存并退出。
# sh ./echodate
20160125
或者
# chmod 755 echodate
# ./echodate
20160125
--------------------------------------------------------------------------------------------------------------------
PS1: 主命令提示符。用户可根据需要自行定义。
PS2: 二级命令提示符。命令执行过程中要求输入数据时用。
LD_LIBRARY_PATH: 寻找动态链接库的路径。如果存在多个路径,路径间用冒号分隔。
用户自定义PS1环境变量举例:
\d 显示当前日期
\h 显示主机名
\t 显示当前时间
\u 显示当前用户的用户名
\w 显示当前工作目录的路径
把提示符格式修改为: "[主机名-用户名][工作目录]>"的形式
export PS1="[\h-\u][\w]" #这个是临时性的
# vi /etc/profile 或者 vi .bash_profile
加入export PS1="[\h-\u][\w]"这句
# source /etc/profile 或者 source .bash_profile
---------------------------------------------------------------------------------------------------------------------
管道是将一个命令的输出作为另一个命令的输入。
例: 要统计当前目录下文件的数量可以用下述命令实现:
# ls|wc -l # ls是显示列表命令,wc是统计命令,|是管道的符号,这条命令表示wc统计ls的输出信息。
重定向技术可以将输入或输出重新定向到指定的目标,如某个文件或打印机等。
>: 重定向,如果是重定向至文件,则目标文件被覆盖。
>>: 重定向,如果是重定向至文件,则将在目标文件的尾部追加。
# cat 文件名称>/opt/a.txt
<: 输入重定向。
<<: 也称为here文档操作符。它通知shell当前运行的命令的输入来自命令行。<<操作符后面的输入用一个分隔符开始,用同样的另外一个分隔符结束。两个分隔符间的内容就是要执行的命令的输入。例如,要统计一段文字单次的数量,如下所示:
wc<<delim
This is a test program!
This is the second line.
delim
创建一个shell脚本autoftp,实现自动登录ftp服务器并下载某文件。其实现过程如下:
# vi autoftp
ftp -n 192.168.1.10<<!
user abc password
get $1
bye
!
保存并退出。
【代码解析】在本例中,通过执行非交互模式(-n选项)的ftp,使用输入重定向符<<,实现了自动登录ftp服务器并下载指定文件的功能。源码的各行解释如下。
第一行:执行非交互模式的ftp,通过<<指定ftp的输入来自于后续的文本。
第二行:自动输入ftp服务器的用户名和密码。
第三行:调用ftp的get命令从服务器获取指定的文件。
第四行:关于与ftp服务器的连接。
第五行:重定向的第二个分隔符,注意该符号应该从下一个新行开始。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
shell变量的使用:
类型: 环境变量、用户自定义变量、系统全局变量。
系统全局变量代表了特定的含义,不能为用户所修改,主要的全局变量包括以下3个:
$#: 执行shell脚本时的命令行参数个数,不包括脚本本身
$?: 执行上一条shell命令的返回值
$0: shell脚本程序自身的名称
变量定义格式如下:
变量名称=变量初始值(注意等号两边不能够有空格)
在用户定义自己的变量时,要遵循以下命名规则。
1、首个字母必须为字母(a~z、A~Z)
2、中间不能有空格,可以使用下划线
3、不能使用标点符号
4、不能使用shell里的关键字(可执行help命令查看保留关键字)
要在脚本程序中使用变量,则通过"$变量名称"的方式进行。即在变量的前面加$符号。另外,在shell编程中存在一种称为位置变量的变量。这种变量类似于C语言编程中的命令行参数,它代表了执行shell程序时的命令行参数。要在shell脚本中引用这些位置变量,通过$0,$1,$2,...的方式进行。其中,$0代表shell命令程序本身,而$1代表shell命令行的第一个参数,$2代表第二个参数,以此类推。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
shell批处理:
# vi test.sh
程序必须以下面的行开始(必须放在文件的第一行)
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
能执行普通的命令。
例如:
#!/bin/bash
# shutdown pc
sudo shutdown +1