嵌入式shell准备
用心,再用心,看了坚持了17年高考的唐尚珺,终于准备读大学了。感慨良久,嵌入式也是一条长路呀。
前置内容
1. 第一个shell,以下都是在终端直接输入
vim hello.sh,然后在hello.sh中输入
#!/bin/bash
#shell 特定的开头格式,表示该脚本采用哪个Shell解释执行,如果没有此句表示采用默认的Shell执行脚本
echo -e "my ljun\n"
# -e开启转义 #除第一行外,其他都是注释 ,注释正确的话,在终羰下会显示为绿色。 #要顶格写
2. 变量练习
Shell 脚本是一种弱类型语言,在脚本当中使用变量不需要也无法指定变量的“类型”。缺省状态下,Shell 脚本的变量都是字符串,即一连串的单词列表。共有3种变量:用户自定义变量,环境变量、内部变量
#!/bin/bash
count=1 #用户自定义变量
echo $count
name="liuj" #赋值号右边只有一个单词,如果是词组必须用双引号括起来,并且,赋值号两边都没有空格
echo $name # 变量引用
echo $HOME
#HOME 大写是一个环境变量 表示home路径
unset name #unset删除变量name
echo ${name}
环境变量
主要的环境变量有:
$LOGNAME 用户登录名
$LANG 语言设置
$HOME 用户自己的主目录
$PSI Shell命令行提示符
$HOSTNAME 主机名
$PS2 命令未完成输入时,再输入时的提示符
$SHELL Shell路径
$MANPATH man命令的搜索路径
$PATH 命令执行时的搜索路径
export 导出一个环境变量练习
export表示让设置的环境变量立刻生效。清除用 unset [变量名]
#!/bin/bash
# export 导出一个环境变量
export MY_NAME="liuj"
env | grep MY_NAME
env #可显示当前用户的所有环境变量
set
#env命令和set命令的区别是,set命令可以查看所有变量,而env命令只能查看环境变量
位置变量,也叫内部变量,由系统提供,不可修改
# 命令行变量
$0 与键入的命令行一样,包含脚本文件名
$1,$2,……$9 分别包含第一个到第九个命令行参数
$# 包含命令行参数的个数 ### 可以理解为数组的下标,是实际的参数的个数,
$@ 包含所有命令行参数:“$1,$2,……$9”
$* 与上面命令一样
$? 包含前一个命令的退出状态,返回0,表示上一条命令执行正确,其他任何值都表明有错误
$$ 包含正在执行进程的ID号
$! 后台运行的最后一个进程的ID号
# 系统预定义的变量
echo $PATH
echo $PWD
新建一个.sh文件,输入
#!/bin/bash
echo 正在执行脚本名称是$0
echo 第一个参数age=$1
echo 第二个参数是address="$2"
echo 全部的参数是 $*
然后在终端输入:xx.sh 12 shandong
会显示出这行命令行的参数。
位置移动命令shift [n],每执行一次shift,实参就会向左移动一位,了解下,不太常用
大体的意思就是说,xx.sh a b c ;shift 2 #执行后结果就是只有实参c了
竖杠(管道)
将一个命令所达成的结果,给到另一个命令进行再加工,如ls -l | wc
ls -l 负责收集当前目录
下的文件的信息,然后将这些文件名作为结果输送到管道,wc 这个命令接着从管道中把他们读取出来,并计算出行数、单词个数和总字符数。
><(重定向)
ls -l 1>a.txt
,# ls -l 命令原本要输出到1号描述符,重定向到a.txt中 注:0号描述符是标准输入,1号是标准输出,2号是标准出错
echo 0<b.doc
#打印b.doc内容,将标准输入重定向到b.doc
echo "hello" 1>&2
#在重定向符的右边,标准输入输出设备文件描述符要写成&0,&1,&2.
cat name
#从标准输入中获取信息,并直接写入到name中
cat >name<a.txt
#相当于把a.txt的内容作为输入,然后> 输出到name中
ls -l >a.txt
#使用>会先判断右边的a.txt是否存在,若存在会删除再创建并清空,使用>>则是判断右边文件是否存在,如果存在就追加信息,否则创建
3. 算术运算 expr主要用于进行简单的整数运算
#!/bin/bash
#expr 12 +5\*3
#\ *表示去掉*号的元字符含义
num=9
sum=`expr $num \* 6`
#`是1旁边的那个反撇号,表示引用命令的运行结果
echo $sum
a=5
b=7
#加法
val=`expr $a + $b`
#$a 与+间要有个空格,也就是运算符与数字之间要用空格
echo "$a</