shell培训使用材料
来源:互联网 发布:阿里云幕布从哪里发货 编辑:程序博客网 时间:2024/04/20 00:45
注意事项
1, 区分单引号、双引号和反引号“``”的作用
$ echo '"$A"' # 最外面的是单引号
"$A" 因为单引号使得内部所有的符号都不在代表特殊含义
$ echo "'$A'" # 最外面的是双引号
'B C' 因为双引号使得单引号失去了它的特殊含义,仅作为字符串被使用
2, 区分本地变量、环境变量和局部变量
set
export
local local.sh
3, 不同shell之间互相调用
father.sh
child.sh
遇到“XXX見つかりません” ,先想想字符方面的问题。
注意不要在代码缩进的时候使用全角空格,否则使用全角空格缩进的全部无法正确解释。程序出现大面积的错误警告。报告XXX見つかりません
注意字符集的问题,如果在本地编辑成后缀ksh,上传后回车符会变为特殊字符。但是在本地编辑成后缀是sh,上传后回车符会被去掉。与FTP工具的配置有关系。
字符串
= 两个字符串相等
!= 两个字符串不等
-z 空串
-n 非空串
逻辑运算
-a 逻辑与,操作符两边均为真,结果为真,否则为假
-o 逻辑或,操作符两边一边为真,结果为真,否则为假
! 逻辑否,条件为假,结果为真
文件状态
- d 目录
- s 文件长度大于0、非空
- f 正规文件
- w 可写
- L 符号连接
- u 文件有s u i d位设置
- r 可读
- x 可执行
数值
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
^ 只只匹配行首
$ 只只匹配行尾
* 只一个单字符后紧跟*,匹配0个或多个此单字符
[ ] 只匹配[ ]内字符。可以是一个单字符,也可以是字符序列。可以使用-
表示[ ]内字符序列范围,如用[ 1 - 5 ]代替[ 1 2 3 4 5 ]
/ 只用来屏蔽一个元字符的特殊含义。因为有时在s h e l l中一些元字符有
特殊含义。/可以使其失去应有意义
. 只匹配任意单字符
p a t t e r n / { n / } 只用来匹配前面p a t t e r n出现次数。n为次数
p a t t e r n / { n,/ } m 只含义同上,但次数最少为n
p a t t e r n / { n,m / } 只含义同上,但p a t t e r n出现次数在n与m之间
$ # 传递到脚本的参数个数
$ * 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$ $ 脚本运行的当前进程I D号
$ ! 后台运行的最后一个进程的进程I D号
$ @ 与$ #相同,但是使用时加引号,并在引号中返回每个参数
$ - 显示s h e l l使用的当前选项,与s e t命令功能相同
$ ? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
day1
1, 查找在当前目录下,48小时内改动过的文件
find . -mtime 2
2, 在当前目录下,列出所有以w开头的文件的详细信息
ls -l w*
3, 新建shell文件,ftp到AIX的个人目录,使用chmod命令为其添加执行权限
chmod u+x filename
默认情况下,有owner的读写权限和Group的读权限
4, 默认情况下的,权限码是多少?如何计算得来?
为其添加Owner的可执行权限,权限码是多少?如何计算?
chmod 740 filename
5, 查找在/cics目录下,以CIC开头的文件
find /cics -name "CIC*"
6, 回到上一次离开的文件夹
cd -
7, 查看当前目录下,Owner有读、写、执行权限,Group有读权限的文件
find . -perm 740
day2
1, 让VI显示行号。设置自动缩进。
: set nu
2, 删除光标所在字符。删除光标所在行。
x
dd
3, 在整篇文档中搜索匹配AAA的字符串
:/AAA
4, 如何在VI中完成下述操作
将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s/aa/bb/g
将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
:s//<aa/>/bb/g
将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
:%s/aa/bb/g
将从第12行到第23行的行首加入 # 字符
:12,23s/^/#/
将所有行尾多余的空格删除
:%s= *$==
5, 完成程序:批量修改当前目录下的文件后缀
#!/bin/ksh
# BatchModifyExt
for FNANDEXT in *
do
FN=`echo $FNANDEXT | cut -f 1 -d "."`
EXT=`echo $FNANDEXT | cut -f 2 -d "."`
if [ $EXT = $1 ]
then
echo "$FNANDEXT -> $FN.$2"
mv $FNANDEXT $FN.$2
fi
done
6, 完成程序:以用户输入的名字作为文件夹名称。如果文件夹存在,则让用户进入这个文件夹
否则创建这个文件夹
#!/bin/sh
echo "Please input user name"
read DIRECTORY
if [ -d $DIRECTORY ]
then
MYPATH=`pwd`
MYPATH=${MYPATH}/${DIRECTORY}
cd $MYPATH
pwd
else
mkdir -p $DIRECTORY
fi
注意
由于shell程序结束时,会返回启动时的路径
所以,从程序中可以看出在shell中,cd到文件夹中。但是退出后,用户的当前状态并不是在用户输入的文件夹中。
7 准备一份VI总结,一份正则表达式总结备查。(可以用别人写好的)
day3
1. 从输入文件中读取指定行的内容到输出文件中。
#!/bin/sh
#ReadSpecificLines
输入文件: text (内容可以自己定义)
输出文件: temp
if [ "$#" -lt 1 ]; then
echo "Usage $0 [FILE] "
exit 1
fi
echo "Enter the line you want to choose from:"
read FROMLINE
echo "Enter the line you want to choose to:"
read TOLINE
rm -f temp
LINENUM=`echo "$TOLINE - $FROMLINE"`
x=1
# opens the file you want choose the line from
exec < $1
while read LINE # read from the file
do
if [ $x -gt $FROMLINE ]
then
if [ $x -lt $TOLINE ]
then
# printf "%s/n" "$LINE" >> temp
echo $LINE >> temp
fi
fi
x=`expr $x + 1`
done
使用例:
Enter the line you want to choose from:
1
Enter the line you want to choose to:
4
$cat temp
line2
line3
day4
1. 完成和Windows Console命令“tree”功能相同的shell脚本。
不要求带命令行参数
显示效果:
/home/matthew/
|--src
| |--asm
| | |-- hello.s
| | |-- shell.s
| | |--hello
| | |--shell
| |--shell
| | |--tree.sh
|--xfce.tar.gz
|-- mbox
`
3 directories, 7 files
#!/bin/sh
#display directory tree structure
LSPROG="/bin/ls"
# COLOR DEFINE
# ============
#
DIR="/033[01;34m"
EXE="/033[01;32m"
DEV="/033[01;33m"
LNK="/033[01;36m"
ZIP="/033[01;31m"
SOCK="/033[01;35m"
NULL="/033[00m"
ROOT=${1:-.}
TRUE=0
FALSE=1
LAYERS=0
FILECOUNT=0
DIRCOUNT=0
# print_dash
# ==========
# Print the structure lines
#
print_dash()
{
local i=0
local num=$1
while [ $i -lt $num ]; do
echo "|/c"
for j in 1 2 3; do
echo " /c"
done
i=`expr $i + 1`
done
echo "|-- /c"
}
# ispkg
# =====
# Test if the file is a package like:
# .gz .tar .tgz .tar.gz .zip .rar .rpm
# and etc.
#
ispkg()
{
local f=$1
local i
# Package extension list, you can add your coustom
# extensions in it.
#
local pkg__ext=".gz .tar .tgz .tar.gz .zip .rar .rpm"
# if the file's suffix contain any package extension
# then cut it.
for i in $pkg__ext; do
f=${f%$i}
done
if [ "$f" != "$1" ]; then
return $TRUE
else
return $FALSE
fi
}
# mktree
# ======
# The main function, that print the
# dictionary structure in dos's tree
# command style. It's runs in nesting.
#
mktree()
{
local f
for f in `$LSPROG -1 $1 2> /dev/null`; do
f=${f%/}
f=${f##*/}
# If dictionary then print it and enter
# the nesting block.
if [ -d $1/$f ]; then
print_dash $LAYERS
echo "${DIR}$f${NULL}"
DIRCOUNT=`expr $DIRCOUNT + 1`
LAYERS=`expr $LAYERS + 1`
mktree $1/$f
else
print_dash $LAYERS
# file is a symbol link
if [ -L $1/$f ]; then
echo "${LNK}$f${NULL}"
# file is executable
elif [ -x $1/$f ]; then
echo "${EXE}$f${NULL}"
# file is a device
elif [ -c $1/$f -o -b $1/$f ]; then
echo "${DEV}$f${NULL}"
# file is a socket
elif [ -S $1/$f ]; then
echo "${SOCK}$f${NULL}"
# file is a package
elif `ispkg $f`; then
echo "${ZIP}$f${NULL}"
else
echo "$f"
fi
FILECOUNT=`expr $FILECOUNT + 1`
fi
done
LAYERS=`expr $LAYERS - 1`
}
echo $ROOT
mktree $ROOT
echo "/`"
echo "$DIRCOUNT directories, $FILECOUNT files"
day5-6
Table定义
std
no name class_no
class
no name
course
no name
grade
grade_no course_no std_no grade
查询
班级课程平均分列表
课程1 课程2 课程3 课程4
班级1 XX XX XX XX
班级2 XX XX XX XX
班级3 XX XX XX XX
学生成绩列表
课程1 课程2 课程3 课程4
学生1 XX XX XX XX
学生2 XX XX XX XX
学生3 XX XX XX XX
学生4 XX XX XX XX
菜单定义
1 查询
2 登记
3 删除
4 更新
1.1 班级列表
1.1.1.1 学生列表
2.1 学生信息登记
2.2 班级信息登记
2.3 课程登记
2.4 成绩记入
3.1 学生信息删除
3.2 班级信息删除
3.3 课程删除
3.4 成绩删除
4.1 学生信息更新
4.2 班级信息更新
4.3 课程更新
4.4 成绩更新
插入
学生信息登记
学生姓名 班级编号 学号,班级号,课程号,成绩号
班级信息登记 请在建表时设定为自动加一
班级名称
课程登记
课程名称
成绩记入
学号 课程号 成绩
- shell培训使用材料
- PSCADA培训材料
- ArcGIS入门培训材料--视频
- 全栈工程师培训材料
- 应用部门的培训材料
- 全栈工程师培训材料
- 41、鸟哥 SHELL 材料
- Windows Azure中文培训材料下载
- Windows Azure中文培训材料下载
- NFC-SWP系统培训材料(总体)
- Mars Chen Android培训材料ContentProvider源代码
- NFC-SWP系统培训材料(总体)
- JVM习题(练石成金培训材料)
- 材料设计使用---BottomNavigation
- 材料进出使用余额日报表
- 材料
- 材料
- Linux培训之教你轻松学习shell变量的使用
- chrome收藏夹位置在哪里?
- TYUTYUT
- Firefox(火狐浏览器) 中使用AJAX(详细说明)
- C++ I/O 构造器
- LENA标准测试图像
- shell培训使用材料
- bad ()
- clear ()
- 新ASP.NET图表控件
- close ()
- eof ()
- fail ()
- C#摄像头 编程 实例
- fill ()