Linux下Shell编程(二)
来源:互联网 发布:拳皇2002键盘优化版 编辑:程序博客网 时间:2024/05/01 13:43
Shell编程下的特殊字符
字符 说明
$ 指出shell变量名的开始
| 把标准输出通过管道传送到下个命令
# 标记注释开始
& 在后台执行进程
? 匹配一个字符
* 匹配一个或几个字符
> 输出重定向操作符
< 输入重定向操作符
>> 输出重定向操作符{添加到文件}
<< 跟在输入结束字符串后(HERE)操作符
[] 列出字符的范围
[a-z] 意a到z的全部字符
[a,z] 意指a或z字符
双引号
在字符串含有嵌入的空格时,用双引号括起来。
例子:
var=“teststring”
newvar=“Value of var is $var”
echo $newvar
单引号
利用单引号把字符括起来,以阻止shell解析变量。把前面的双引号改为单引号
var=”teststring”
newvar='Value of var is $var’
echo $newvar
执行程序可得到如下的结果:
Value of var is $var
反引号
通知 shell 执行由反引号定义的字符串。当需要把执行命令的结果存放在变量中时,就可以在 shell程序中利用反引号
string=”current directory is `pwd`”
echo $string
current directour is /home/huzl
管道
可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠 | 表示。
格式:命令1 | 命令2
举例:
cat /dev/event0| hexdump
history |grep "mv"
文件重定向
改变程序运行的输入来源和输出地点。
重定向标准输出
cat file | sort > sort.out
pwd >> path.out
echo 5 > file
echo 3 > file
echo 4 > file
重定向标准输入
sort < file
sort < name.txt > name.out
shell下运算符
$[ ] 和 $(()) 两种格式功能一样,所有的 shell 的求值都是用整数完成
echo $[2+8]
echo $((2+8))
echo `expr 2+8 `
赋值运算符=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=
var=9
let var+=1
echo $var 结果为10
var+=1
echo $var 结果为101
整数的算术运算符+、-、*、/、%;
赋值运算符
+=、-=、*=、/=、%=
位运算符
<<、>>、&、|、~、^;
位运算赋值运算符
<<=、>>=、&=、|=、~=、^=;
逻辑运算符:
&&,||,!,>,>=,<,<=,!=,==
echo 命令可以显示文本行或变量,或者把字符串输入到文件。
read 语句可以从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。
read varible1 varible2 …
如果只指定了一个变量,那么 read 将会把所有的输入赋给该变量,直到遇到第一个文件结束符或回车;
如果给出了多个变量,它们按顺序分别被赋予不同的变量。Shell 将用空格作为变量之间的分隔符。
键盘获取字符串
echo "enter a word "read find_checho $find_ch文本获取字符串
#!/bin/bashecho "welcome to start for shell language"count=1cat $1 | while read linedo echo "Line$count:$line" count=$[ $count +1 ]doneecho "program end"
比较运算
1、文件比较运算符
-e filename如果 filename 存在,则为真[ -e /var/log/syslog ]
-d filename如果 filename 为目录,则为真[ -d /tmp/mydir ]
-f filename如果 filename 为常规文件,则为真[ -f /usr/bin/grep ]
-L filename如果 filename 为符号链接,则为真[ -L /usr/bin/grep ]
-r filename如果 filename 可读,则为真[ -r /var/log/syslog ]
-w filename如果 filename 可写,则为真[ -w /var/mytmp.txt ]
-x filename如果 filename 可执行,则为真[ -x /usr/bin/grep ]
2、字符串比较运算符(注意引号的使用,这是防止空格扰乱代码的好方法)
-z string如果 string 长度为零,则为真[ -z "$myvar" ]
-n string如果 string 长度非零,则为真[ -n "$myvar" ]
string1 = string2如果 string1 与 string2 相同,则为真
[ "$myvar" = "one two three" ]
string1 != string2如果 string1 与 string2 不同,则为真
[ "$myvar" != "one two three" ]
3、算术比较运算符
num1 -eq num2等于[ 3 -eq $mynum ]
num1 -ne num2不等于[ 3 -ne $mynum ]
num1 -lt num2小于[ 3 -lt $mynum ]
num1 -le num2小于或等于[ 3 -le $mynum ]
num1 -gt num2大于[ 3 -gt $mynum ]
num1 -ge num2大于或等于[ 3 -ge $mynum ]
4、测试命令
test命令用于检查某个条件是否成立,它可以进行数值、字符和文件3个方面的测试,
test $a -eq $b && echo "a euqal b"[ $a -ne $b ] && echo "a not equal b"
[ $a -gt $b ] && echo "a big then b"
[ $a -lt $b ] && echo "a less then b"
[ -e ./huzl.sh ] && echo "huzl.sh is exit"
[ -x ./huzl.sh ] && echo "huzl.sh is excuate"
chmod +x huzl.sh
[ -x ./huzl.sh ] && echo "huzl.sh(1) is excuate"
5、逻辑运算符
逻辑与: -a 格式: [ condition1 -a condition2 ]
逻辑或: -o 格式: [ condition1 -o condition2 ]
逻辑否: ! 格式: [ ! condition ]
if [ $# -gt 1 -a $# -lt 3 ] ;thenecho "the value :$#"
fi
[root@localhost ~]# [ 1 -eq 1 ] && echo 'ok'
ok
[root@localhost ~]# [ 2 < 1 ] && echo 'ok'
-bash: 2: No such file or directory
[root@localhost ~]# [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'
ok
流程控制语句
常见分支结构:
if
case
常见循环结构:
for
while
until
shell命令,可以按照分号分割,也可以按照换行符分割。如果想一行写入多个命令,可以通过“';”分割。
if 条件测试语句
then
action
[elif 条件
action
else
action
]
fi
说明:
[] 表示这段代码可选.
当条件为真(0)时执行then后面的语句,否则执行else后面的语句;
以fi作为if结构的结束。
if [ condition ];then
action
fi
if [ $# == 1 ] ;thenif [ -f $1 ] ; thenecho "$1 is a file"if [ -x $1 ] ;then$1elseecho "It is not x"fielse if [ -d $1 ] ; thenecho "$1 is a dir"elseecho "$1 is not exit"echo "It will be creator"touch $1 fifielseecho "the val is not valid"fi
Case语句
case选择语句使用(case/esac)
语法结构
case $arg in
pattern | sample) # arg in pattern or sample
;;
pattern1) # arg in pattern1
;;
*) #default
;;
esac
说明:
“条件”可以是变量、表达式、shell命令等;
“模式”为条件的值,并且一个“模式”可以匹配多种值,不同值之间用竖线(|)联结 ;
一个模式要用双分号(;;)作为结束 ;
以逆序的case命令(esac)表示case分支语句的结束
echo "================case test=============="case $# in1)echo "the var is $1";;2)echo "the var is $1 $2";;3)echo "the var is $1 $2 $3";;*)echo "too many vars";;esac
#!/bin/sh case $1 instart | begin) echo "start something" ;;stop | end) echo "stop something" ;;*) echo "Ignorant" ;;esac
For循环
do
命令(通常用到循环变量)
done
“列表”为存储了一系列值的列表,随着循环的进行,变量从列表中的第一个值依次取到最后一个值;
do和done之间的命令通常为根据变量进行处理的一系列命令,这些命令每次循环都执行一次;
如果中括号中的部分省略掉,Bash则认为是“in $@”,即执行该程序时通过命令行传给程序的所有参数的列表。
echo "================for test=============="sum=0for((i=0;i<10;i++ ))do#echo $isum=$(( $sum +$i ))doneecho "sum = $sum"j=0#echo "enter a word "#read find_ch#for i in a b c d e f g #do#if [ $i == $find_ch ] ; then echo "find it ($j)" break #fi#j=$(( $j+1))#done
While循环
do
命令
done
while循环中,只要条件为真,就执行do和done之间的循环命令;
until循环中,只要条件不为真,就执行do和done之间的循环命令,
避免生成死循环
echo "================while test=============="sum=0loop=$1while [[ $loop -gt 0 ]]; do#statementsecho "$loop"sum=$(( $sum + $loop))loop=$(($loop -1 ))doneecho "$sum"
break 和continue 语句
break 语句
用来终止重复执行的循环。break通常在进行一些处理后退出循环或case语句。如果是在一个嵌入循环里,可以指定跳出的循环个数。例如如果在两层循环内,用break 2刚好跳出整个循环。
continue语句
它不会跳出循环,只是跳过这个循环步。
函数使用
说明:
中括号中的部分可以省略;
如果在函数内部需要使用传递给函数的参数,一般用$0、$1、......、$n,以及$#、$*、$@这些特殊变量 :
$0为执行脚本的文件名;
$1是传递给函数的第1个参数 ;
$#为传递给函数的参数个数;
$*和$@为传递给函数的所有参数
echo "welcome to start for shell language"func1(){ echo "function1 test"}func2(){ echo "function2 test" echo $1}func1func2 Goodbye
函数返回值
#!/bin/bashecho "welcome to start for shell language"func1(){ echo "function1 test"}func2(){# echo "function2 test"# echo $1 if [ $#>=1 ] ; then return 1 else return 0 fi}echo "the func2 result is `func2 Goodbye ;echo $?`"
使用$?变量存放退出状态码,由函数中的最后一条语句决定
2)return命令
#!/bin/bash
func3() {
read -p "enter a number: " value
return $[ $value + 1 ]
}
func3
echo "func3's exit status is $?"
3)使用函数输出
#!/bin/bash
func3() {
read -p "enter a number: " value
echo $[ $value + 1 ] echo显示值
}
result=`func3` 将函数输出赋值给新变量
echo "new value is $result"
- linux下shell编程笔记(二)
- linux下shell编程(二)------修订版
- Linux下Shell编程(二)
- Linux下的shell编程(二)--变量
- linux shell编程(二)
- LINUX shell编程(二)
- linux shell 编程(二)
- Linux程序设计(Linux shell编程二)
- Linux Shell编程 二
- Linux下Shell编程
- linux下shell编程
- Linux下Shell编程
- Linux下shell编程
- Linux 下shell编程
- Linux下Shell编程
- Linux 下shell编程
- Linux下shell编程
- linux下shell编程
- 【C语言】strcpy函数的实现
- Javascript常见兼容问题解决方案汇总(一)
- linux LAMP环境搭建(centos7)
- 时间和日期
- cocos2dx 3.X 播放视频
- Linux下Shell编程(二)
- 从underscore中提取模板函数
- C# 调用dll获取dll物理路径的方法
- 输入文本框中的内容改变,立即出发js的实现
- Tomcat调用dll运行路径
- makefile.am和makefile.in
- how to clear all Configuration while android stuodio.AndroidStudio1.2
- 数据库的隔离级别
- makefile.am和makefile.in