- 变量,为用户提供了一种存储、检索、操作数据的途径。
- 环境变量、位置变量、预定义的特殊变量、用户自定义变量
- 环境变量
(1)SHELL环境变量,是一类shell预定义变量,是用于设置系统运行环境的变量,有系统统一命名。
部分环境变量的值由系统设定,部分环境变量的值由用户设定。
(2)HOME:用户主目录的全路径名
cd 与cd $HOME等价
(3)PATH:定义了一些目录路径,路径由冒号分隔。
在执行命令或shell脚本时,shell会按PATH变量中设定的顺序搜索这些目录,找到的第一个匹配的命令或shell脚本将被执行。
(4)TERM:终端类型。
(5)PWD:当前工作目录的绝对路径。
(6)PS1:主提示符。 根用户的主提示符#,普通用户的主提示符$
(7)PS2:辅助提示符。默认的辅助提示符为>
(8)SHELL:定义shell的解释器路径。
(9)MAIL:定义系统信箱的路径。
(10)LOGNAME:登陆用户的用户名。
(11)UID:当前用户的UID。
- 位置变量
当SHELL解释一个命令时,会将位置变量与命令行中的每一个参数关联,依次是:
$0:对应当前执行的命令名
$1:对应第1个位置参数
$2:对应第2个位置参数
...
$9:对应第9个位置参数
当命令行上的参数多于9个时,需要用shift命令移动位置参数,每执行一个shift命令,变量0不变,从1开始位置参数左移一位。
- 预定义的特殊变量
变量 说明 $# 实际位置参数个数(不包括SHELL脚本名) $* 命令行中的所有位置参数组成的字符串 $! 上一个后台命令对应的进程号 $? 表示最近一条命令执行后的退出状态(返回值),为十进制数。 执行命令成功,一般返回0. $$ 当前进程号PID - 用户自定义的变量
用户可以根据需要自定义变量。变量名称区分大小写。
变量名称,由字母或者下划线开头,后面是任意数量的字母、数字、下划线。
- 创建变量
declare和typeset用于创建变量。 通过选项,还可以设置变量的创建方式。
例如,declare -r 可以创建只读变量。 只读变量不能被撤销。 不带任何选项执行declare命令,将列出所有设置的变量。
通过 变量名=变量值 来创建变量。
- 用{}来区分变量与其他字符,例如,${order}th,${order}才是变量
- unset,删除变量
- 变量的赋值
(1)直接赋值
NAME=Tom
(2)使用read命令赋值
read 变量1 变量2 ...
//多个数据或变量之间用空格分隔
//若变量个数与数据个数相等,则对应赋值
//若变量个数大于数据个数,则没有输入数据的变量取空值
//若变量个数小于数据个数,则多余的数据赋值给最后一个变量
(3)命令行参数赋值
echo "you are $1"
(4)命令的输出结果赋值
CURRDIR=‘pwd‘
(5)文件读入数据实现赋值
#! /bin/bash
#filename:readfile
ls *.c > execfile
while read LINE
do
chmod +x $LINE
done<execfile
- printf 和 echo 输出
# printf "sdgafgf%d\n" 3
sdgafgf3
#echo $name1 [$name2 ...]
- 数组
声明一个数组并为其赋值
#student=(element1 element2...)
#i=0
#echo ${student[$i]}
- 数组的复制
数组还有两个特殊的索引*和@, 其作用都是提取出整个数组元素,但当他们加上双引号使用时,略有不同。 符号@的含义是把原数组的内容复制到一个新数组中,生成的新数组和原来的一样的; 但符号*是把原来的数组中的所有元素当初一个元素复制到新数组中,生成的新数组只有一个元素。
#all = ("${name[*]}")
#list = ("${name[@]}")
- 数组元素的个数
${# name[*]}
- 数组元素的长度
${# name[num]}
- Bourned Shell没有内置的算术运算,不能直接加、减、乘、除。
- 整数运算使用expr或let命令
- 浮点数运算,使用awk或bc
- expr命令
expr命令,是一个表达式处理命令。使用的运算符:+、-、\*、/、%。运算符前后需要留有空白,且只能是整数运算。
# echo `expr 3 \* 2`
6
#a=5; b=3
#echo `expr $a + $b`
8
#
- let命令
let命令可与expr互换使用。 let语句不需要再变量前加美元符号,但必须将单个的或带有空格的表达式用双引号引起来。
# a=5; b=3
# let a=a+b
# echo a
a
# echo $a
8
#
- bc命令
# n=`echo "s=2; 10/3" | bc`
# echo $n
3
# n=`echo "scale=2; 10/3" | bc`
# echo $n
3.33
如上所示,scale不能改成别的名字,它表示10/3结果的小数点位数;
- awk命令
格式:n=`awk ‘BEGIN {}‘`
# n=`awk ‘BEGIN {a=3.3; b=1.1; printf "a*b=%.2f, a/b=%.3f" a*b, a/b}‘`
awk: cmd. line:1: fatal: not enough arguments to satisfy format string
`a*b=%.2f, a/b=%.3f3.63‘
^ ran out for this one
# n=`awk ‘BEGIN {a=3.3; b=1.1; printf "a*b=%.2f, a/b=%.3f" ,a*b, a/b}‘`
# echo $n
a*b=3.63, a/b=3.000
注意printf后面的""后面需要有,
SHELL笔记7
时间: 2024-10-18 20:13:27
SHELL笔记7的相关文章
【转】Linux shell笔记
由于工作的需要,越来越多的接触到linux系统.最近看了<Linux与Unix Shell>这本书,安装书的章节整理了一些自己认为比较重要的命令,方便以后查阅. No.001 文件安全与权限 1. umask 决定了新建文件的权限 2. 软链接(符号链接) ln -s source_path target_path No.002 find和xargs 1. find pathname -options [-print -exec -ok] 其中exec参数的命令格式: 'command-
Bash shell 笔记总结(一) 转自http://www.bubuko.com/infodetail-509992.html,谢谢原作者
本文是上课笔记总结,涉及细节知识点会在以后文章说明! bash脚本编程: 脚本程序:解释器解释执行: shell: 交互式接口:编程环境: shell: 能够提供一些内部命令,并且能通过PATH环境变量找到外部命令:把命令提交给内核启动为进程: 编程环境: 流程控制语句: 顺序执行: 循环执行: 选择执行: 条件测试:真.假 $? 命令的状态结果: 0: 真 1-255: 假 过程式的编程语言的元素:变量.流程.函数.数组 变量:局部变量.本地变量.环境变量.位置参数变量.特殊变量 变量: 数值
shell笔记2 tput
shell数组 command_list=( [add]='添加' [del]='删除' [edit]='修改' [query]='查询' ) 取得索引:${!command_list[*]},根据索引提交值,执行对应的操作. 取得长度:${#command_list[*]},根据长度进行遍历,取出所有元素. 打印清单:${command_list[@]} -------------------------------------------- 密码输入时候不显示: echo "请输入密码: &
shell笔记
输出重定向 命令 > 覆盖 命令 >> 追加 错误命令 2>文件 错误命令 2>>文件 ls >> /root/ls.txt lst 2>> /root/ls/ls.txt 2和大于号不能有空格 不管正确错误都保存的格式 命令 >文件 2>&1 命令 >>文件 2>&1 命令 &>文件 命令 &>>文件 命令>>文件1 2>>文件2 正确 错误
SHELL笔记8
shell的控制结构:条件结构.分支结构.循环结构 if,条件结构 if 表达式 then 命令表 [else 命令表] fi 可以使用分号将多个命令在一行内进行组合.因此,处于美观和节省空间的考虑,上述格式简写为: if 表达式; then 命令表 [else 命令表] fi if语句可以无限嵌套 if 表达式 then 命令表 [elif 表达式 then 命令表] ... ... [else 命令表] fi 可以直接命令表换成一个if条件语句 case结构 case 表达式 in
SHELL笔记3
cal命令:日期显示 cat /proc/meminfo :内存使用情况查询 free命令:内存详细信息查询 arch命令:CPU架构显示 显示当前系统的体系结构,例如: #arch x86_64 cat /proc/cpuinfo:CPU信息显示 cat /proc/modules:查询当前系统被加载模块 Linux系统包含的信息:文件系统,内核模块,硬件信息,启动参数等. proc文件系统:访问系统内核信息 (1) proc不是一个真实的文件系统,不占用外存空间,只是以文件的方式访问Linu
SHELL笔记2
shell类型:Bourne Shell.Bourne Again Shell.C Shell.Korn Shell.Perl shell 用户可以选择自己喜欢的shell(在系统管理员为用户创建账户时指定),在/etc/passwd文件最后一个字段中可以看到用户当前使用的shell的名称 使用grep命令查看/etc/passwd文件,显示当前登陆用户使用的shell,命令格式如下: #grep $LOGNAME /etc/passwd Bourne Again Shell, 就是Bash,是
SHELL笔记9
文件类型:普通文件.目录文件.套接字文件.设备文件.链接文件 判断一个文件是否是符号链接文件.是,将其移动到/etc目录下:不是,不做处理. 1 #! /bin/bash 2 #filename:a.sh 3 FILENAME= 4 echo "Input file name: " 5 read FILENAME 6 if [ -L $FILENAME ] 7 then 8 mv $FILENAME /etc 9 fi 设计一个shell程序,给
shell笔记:移动文件
1.编写个shell脚本将当前目录下大于10K的文件转移到当前目录下的tmp文件夹中 #/bin/sh #Programm :1.sh # Using for move currently directory to /tmp #首先一定要注意,in后面的符号不是单引号,而是~键下面那个符号 #!/^d/ 表示当前的文件夹文件,不要移动,即开头是d的那一行 #!/.sh$/ 结尾是.sh的文件不要移动,脚本文件也在这个目录,也不要移动哦 for FileName in `ls -l | awk '