shell 编程了解
来源:互联网 发布:显示器推荐2017知乎 编辑:程序博客网 时间:2024/04/30 06:52
1.程序必须以下面的行开始(必须方在文件的第一行):
#!/bin/sh
符号#!用来告诉系统它后面的参数是用来执行该文件的程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
chmod +x filename
2.注释
在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。不要忽略注释的重要性。
3.变量
在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明。
变量名=值 eg:a="helloworld" #"="左右没有空格,语句后面不加分号
取出变量值可以加一个美元符号($)在变量前面:
echo "a = ${a}!"
4.特殊参数
shell对几个参数进行特别处理。这些参数可能只能被引用;对它们赋值是不允许的。
$#:传入脚本命令行参数个数
$*:所有命令行参数的值,在各个参数之间留有空格
$@:所有命令行参数的值
$0:shell文件名
$1:第一个命令行参数
$?:表示上一条命令的退出状态
- - - - - - - - - -filename specVar.sh- - -- - - - - - -
#!/bin/sh
echo "/$# means $#"
echo "/$* means $*"
echo "/$@ means $@"
echo "/$0 means $0"
echo "/$1 means $1"
- - - - - - - - - -out- - - - - - - - --./specVar.sh 1 2 3- - - - - - - - - -
$# means 3
$* means 1 2 3
$@ means 1 2 3
$0 means ./specVar.sh
$1 means 1
5.局部变量
#!/bin/sh
hello="var1"
echo ${hello}
function func{
local hello="var2"
echo ${hello}
}
func
echo ${hello}
- - - - - - - - -
在虚拟机(RedHat企业版5)上运行提示错误syntaxerror near unexpected token `local'
在网上搜索出来:
long long ago..... 老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,<CR>,ASCII码为0D),另一个字符把纸上移一行 (称为换行, <LF>,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是<LF>。Apple开发者规定了用<CR>。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的<CR><LF>。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。
long long ago..... 老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,<CR>,ASCII码为0D),另一个字符把纸上移一行 (称为换行, <LF>,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是<LF>。Apple开发者规定了用<CR>。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的<CR><LF>。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。
解决办法:
1)vi -b back.sh
2)%s/^M//g
///////注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”
用上面的方法没有发下^M,在敲一遍,还是错误...不解???????????????????????
======
后来将
function func{
修改为
function func
{
或
functionfunc <space>{
OK,通过。汗~~~格式要求太严格了
6.常用语句
(1)if语句格式:
if [ expression ] #"["两边有空格
then
#code block
else if [ expression ] #elif [ expression ]
then
#code block
else
#code block
fi
fi
- - - - - - - - - -
if
command/function #command 执行成功返回0/函数返回0,执行then中的语句(与C语言不同)
then
- - - - - - - - - -
常用的比较操作符
比较操作 整数操作 字符串操作
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于等于 -ge
小于等于 -le
为空 -z
不为空 -n
- - - - - - - - - -
例:比较整数a和b是否相等 if [ $a = $b ] 或者 if [ $a -eq $b ] #"="和"-eq"左右有空格
判断字符串a是否为空 if[ -z $a ]
- - - - - - - - - -
特殊判断
-e 文件已经存在
-f 文件是普通文件(相对于链接文件及目录文件而言)
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可读
-w 文件对当前用户可写
-x 文件对当前用户可执行
- - - - - - - - - -
例:
#!/bin/sh
folder=/home
[ -r $folder ] && echo"$folder can be read" #当&&前面的条件为真的时候执行后面的语句
[ -f $folder ] || echo "$folder isnot a normal file" #当||前面的条件为假的时候执行后面的语句
(2)For 循环结构
for var in [list]
do
#code block
done
- - - - - - - - - -
例:i)#!/bin/sh -x #采用./filename.sh方式运行可以查看运行次数
for day in sun mon tue
do
echo $day
done
ii)#!/bin/sh -x
for day in "sun mon tue"
do
echo $day
done
(3)while/until循环结构
while [expression]
do
#code block
done
until [expression]
do
#code block
done
while和until的区别在于while是expression为真的时候执行,until为假的时候执行。
(4)case语句
case "$var" in
condition1 )
#code
;; #break
conditon2 )
#code
;;
* )
#default code
;;
esac
- - - - - - - - - -
例:#!/bin/sh
echo "hit a key,then hitreturn"
read Keypress
case "$Keypress" in
[A-Z] ) echo "Uppercaseletter";;
[a-z] ) echo "Lowercaseletter";;
[0-9] ) echo "Digit";;
* ) echo "Other key";;
esac
=======================================================
另:
- shell 编程了解
- linux 命令行和shell 脚本编程--了解shell
- Shell编程学习——我所了解的Shell
- 学习Shell编程不迷茫之一----基础了解
- 应该了解SHELL常用命令
- SHELL初了解
- Shell脚本了解
- shell简单了解
- Shell脚本编程——了解你的Linux系统必须掌握的20个命令
- shell 以及shell编程
- Shell和Shell编程
- 【shell】shell 编程基础
- Shell及其Shell编程
- Shell编程
- Shell编程
- Shell编程
- shell编程
- Shell编程
- 最佳的75个安全工具
- 通过Nginx使全站页面变灰,哀悼玉树地震遇难者
- partial path compression.偏路径压缩C语言
- 网络安全工具100强介绍与下载
- poj 2001
- shell 编程了解
- ubuntu下用vinagre连接vncserver
- 提醒自己
- Direct3D的一些小贴士收藏
- JS控制图片等比例缩放
- 第一次写树。。。纯当纪念吧。。只有1个节点要特判内牛满面。。
- 如何解决CMOS check sum error-Defaults loaded
- Summary to RapidFTR project
- Opengl及D3D以及Shader实现的特效