嵌入式Linux系统编程学习之四Shell编程


前言

Shell脚本最好以".sh"为后缀,Shell脚本程序以"#!/bin/bash"开始。(注释符号:#)


一、Shell变量

Shell变量没有数据类型,都是字符串,即使数值也是字符串。

1.创建变量

 变量名称=值
 如果值有空格则必须用" "或’ '引起来。
示例:

a="hello"	("="号两边不能有空格)

2.引用变量

 echo $a 或 echo ${a} 或 echo “${a}”
 注意’ ‘(单引号)与" “(双引号)的区别:单引号消除所有字符的特殊意义;双引号消除除$、” "、’ '以外其他字符的特殊意义。
示例:

echo $a					->hello
echo "${a}a"			->helloa
echo '${a} a'			->${a}a

3.删除变量

 unset 变量名

unset a

4.设置变量为只读变量

readonly a=3

也可从键盘输入:

read a

5.显示上条命令执行结果或函数返回值

echo $?		(0表示成功,1表示失败)

 转义符" \ "

a="What's your \"topic\"?"

 命令替换
 echo ‘命令’ 等价于 echo $(命令)
显示当前系统时间:

echo `date`(小飘号) 或 echo $(date)

6.表达式计算

 echo $(expr 4+5) 或 echo ‘expr 4+5’ 或 echo $((4+5)) 或 echo $[4+5] 或 expr 4+5

二、标准变量

标准变量(或环境变量)是系统预定义的变量,一般在/etc/profile中进行定义,用env查看所有环境变量,用" env | grep “name” “来查找。
HOME:用户的主目录
IFS:表示内部字段分隔符
LOGNAME:登录名
MAIL:用户邮箱存放的位置
MAILCHECK:用户的邮箱检查是否有新邮件时间间隔,默认60s
MAILPATH:用户有多个邮箱时,mail存在哪几个文件中,格式和 PATH变量一样
TERM:用户登录系统的终端类型,默认是vt100
PATH:可执行文件寻找的路径
TZ:表示时区
PS1:登录系统的提示符
PS2:命令提示符,需要输入多行时的提示符。默认是”>"
PWD:当前目录
SHELL:当前运行的shell
MANPATH:帮助文档存放的路径
TERMINFO:终端类型的配置信息
设置环境变量的方法,如将"/etc/apache/bin"目录添加到PATH中,只针对当前用户有效,步骤如下:
(1)#PATH=$PATH:/etc/apache/bin;
(2)vi /etc/profile,在里面添加"PATH=$PATH:/etc/apache/bin";
(3)vi ~/.bash_profile,在里面修改PATH行,把"/etc/apache/bin"加进去。
用"export"进行设定或更改为全局变量,用"#unset 变量名"取消全局变量的定义。

三、特殊变量

(1)$1,$2,…,$n 传入的参数($0表示Shell程序名称),其中每一项相当于main函数中argv[i];
(2)$# 传递到脚本的参数列表,或表示参数个数,相当于main函数的argc-1;
(3)$@ 传入脚本的全部参数:argv[1], …, argv[n-1];
(4)$* 显示脚本全部参数;
(5)$? 前个命令的执行情况,0表示成功,1表示失败;
(6)$$ 脚本运行的当前进程号;
(7)$! 运行脚本的最后一个命令。

四、变量赋值

变量赋值的5种格式:
(1)${variable name} 显示实际值;
(2)${variable name:+value} 若设置了variable name,就把value值显示出来,未设置就显示空;
(3)${variable name:-value} 若设置了variable name,就把值显示出来,未设置就显示value值;
(4)${variable name:?value} 若未设置,就提示用户错误信息value;
(5)\${variable name:=value} 若未设置,就显示value值。

五、运算符与表达式

运算符包括:
(1)算术运算符(+、-、*、/、%);
(2)逻辑运算符(&&、||、>、==、<、!=);
(3)赋值运算符(=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=)。
计算表达式包括:
(1)$(());(2)$[];(3)let var=;(4)expr 4+5。

六、test命令的用法

test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
(1)判断表达式(and,or)
  test 表达式1 -a 表达式2(两个表达式都为真)
  test 表达式1 -o 表达式2(两个表达式有一个为真)
(2)判断字符串
  test -n 字符串:字符串的长度非零
  test -z 字符串:字符串的长度为零
  test == 字符串:字符串相等
  test != 字符串:字符串不等
(3)判断整数
  test 整数1 -eq 整数2:整数相等
  -ge 表示大于等于;
  -gt 表示大于;
  -le 表示小于等于;
  -lt 表示小于;
  -ne 表示不等于。
(4)判断文件
  test File1 -ef File2:两个文件具有同样的设备号和i节点
  test File1 -nt File2:文件1比文件2新
  test File1 -ef File2:文件1比文件2旧
  test -b File:文件存在且是块设备文件
  test -c File:文件存在且是字符设备文件
  test -d File:文件存在且是目录
  test -e File:文件存在
  test -f File:文件存在且是普通文件
  test -g File:文件存在且设置了组ID
  test -G File:文件存在且属于有效组ID
  test -h File:文件存在且是符号链接(同L)
  test -k File:文件存在且设置了sticky位
  test -L File:文件存在且是符号链接(同h)
  test -o File:文件存在且属于有效用户ID
  test -p File:文件存在且是命名管道
  test -r File:文件存在且可读
  test -s File:文件存在且是套接字
  test -t File:是在终端打开的文件描述符
  test -u File:文件存在且设置了set-user-id位
  test -w File:文件存在且可写
  test -x File:文件存在且可执行

七、数组

定义1:a=(1 2 3 4 5) #从0开始,各个数据之间用空格隔开
定义2:a[0]=1;a[1]=2;a[2]=3
定义3:a=([1]=1 [2]=2)
引用:
 ${a[2]} #下标为2的数据
 ${#a[*]} #数组的长度
 ${a[@]:2} #截取下标从2到最后
 ${a[@]:1:2} #截取从下标1到后面2个

八、if语句

语法:
 if [condition]
 then action
 elif [condition2]
 then action2
 else actionx
 fi
在使用时,将"if"和"then"放在不同行;若同行放置,则if语句必须要用";"结束。

九、case语句

常用语法:

case $1 in
	"1")
		echo you inputed "1"
		;;
	"2")
		echo you inputed "2"
		;;
	*)
		echo you inputed other number
		;;
esac

十、for循环

示例:

for x in one two three four
do
	echo number $x
done

十一、while语句

常用语法:

myvar=0
while[$myvar -ne 10]
do
	echo $myvar
	myvar=$(($myvar+1))
done

十二、untile语句

常用语法:

myvar=0
untile[$myvar -eq 10]
do
	echo $myvar
	myvar=$(($myvar+1))
done

十三、Shell函数

函数名() { 命令1 … …}
function 函数名() { … …}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值