2015.1.21学习笔记和心得!

2015.1.21

随笔:

指令:cp -v 显示复制过程
sort 按次序显示文件
whereis 查找命令
ln -s src dest 连接文件 dest -> src

/etc/apt/sources.list //存放镜像的地址
/var/lib/lists/* // 存放索引文件的地址
/var/cache/apt/archives //下载的软件包缓存的地址

编写shell脚本:三步走
1.创建shell脚本,vim shell.sh
2.修改权限,增加执行权限 chmod 777 shell.sh
3.执行脚本 ./shell.sh bash shell.sh . shell.sh 三种方式

定义变量,4种:变量一般大写
1.用户自定义变量,引用需要加$符号,清除用unset;
$COUNT=1 //等号中间没有空格
调用;$echo $COUNT
应用:$Y=2
$X=$Y
echo X=$X

2.命令行参数变量,位置变量
$0 ./a.out
$1 第一个参数
$2 .......

3.shell预定义变量:
$# 包含命令行参数的个数,不包含命令 one.sh a b c ->$#=3
[email protected] 包含所有命令行参数 $1,$2...$9
$* 包含所有命令行参数 $1,$2...$9
$? 包含前一个命令(上一行命令)的退出状态,成功返回0,反之非0
$$ 正在执行进程的ID ps -ef ,pstree,top三个命令都可以查看进程

4.环境变量定义:
$HOME
$SHELL

$export TEST=test
命令效果:
LANG=en_US.UTF-8
TEST=test //增加的环境变量
SHLVL=5

使用unset命令删除变量赋值: $export TEST=test
$unset TEST
命令效果:
LANG=en_US.UTF-8
SHLVL=5 //上面的TEST被删除了

在原来的环境变量后面追加,原来的不丢失: TEST=$TEST:/home/lg
echo $TEST
命令演示:
[email protected]:~/workspace/shell# export TEST=test
[email protected]:~/workspace/shell# echo $TEST
test
[email protected]:~/workspace/shell# TEST=$TEST:/home/lg
[email protected]:~/workspace/shell# echo $TEST
test:/home/lg
[email protected]:~/workspace/shell#

shell语句:
说明性语句:#开头,如:#!/bin/bash

键盘读入变量的值:
read 变量

命令演示:
#!/bin/bash
read var1
read var2
echo $var1
echo $var2

算术运算:expr

命令演示:
#!/bin/bash
read var1
read var2
add=·expr $var1 + $var2· //左右加反丿号,赋值给另一个变量
sub=·expr $var1 - $var2·
mul=·expr $var1 \* $var2· //注意乘号的符号有点特殊,是 \*
div=·expr $var1 / $var2·
mod=·expr $var1 % $var2·

echo "add=$add"
......

命令演示:
#!/bin/bash
2 read a
3 read b
4 echo "$a"
5 echo "$b"
6 add=`expr $a + $b`
7 echo "add=$add"

[email protected]:~/workspace/shell# ./2.sh
12
34
12
34
add=46

条件测试语句:

test命令可测试三种对象:字符串,整数,文件属性

test "$1" = "yes" == [ "$1" = "yes" ] 两种方法都可以,注意两边的空格
test $1 -eq 18 == [ $1 -eq 18 ]
test -d $1 == [ -d $1 ]

命令演示:
脚本:编写的时候注意[]两边空格,if要与fi匹配,按最近原则匹配!
1 #!/bin/bash
2 if [ "$1" = "yes" ]
3 then //then表示表达式为真
4 echo "$1 is yes"
5 else
6 if [ $1 -eq 18 ]
7 then
8 echo "$1 is 18"
9 else
10 if [ -d $1 ]
11 then
12 echo "$1 is a directory"
13 else
14 echo "$1 I don‘t know"
15 fi
16 fi
17 fi

执行效果:
[email protected]:~/workspace/shell# ./3.sh yes
yes is yes
[email protected]:~/workspace/shell# ./3.sh 18
18 is 18
[email protected]:~/workspace/shell# ./3.sh hello
./3.sh: line 6: [: hello: integer expression expected
hello is a directory
[email protected]:~/workspace/shell# ./3.sh 19
19 I don‘t know
[email protected]:~/workspace/shell# vim 3.sh

多路分支语句:
脚本:编写时注意[]两边的空格,case和esac要配套使用。
1#!/bin/bash
2 if [ $# -eq 0 ]
3 then
4 echo " no argument is declared"
5 exit
6 fi
7 case $1 in //注意格式,case后面是变量名在加in
8 file1) //模式1 判断变量是不是等于file1
9 echo "user selects file1" //命令表,可写多行
10 ;; //注意这个分号,中间不能有空格,表示命令表1结束
11 file2)
12 echo "user selects file2"
13 ;;
14 *)
15 echo "unknow"
16 ;;
17 esac //表示整条case语句结束

执行效果:

[email protected]:~/workspace/shell# ./4.sh
no argument is declared
[email protected]:~/workspace/shell# ./4.sh file1
user selects file1
[email protected]:~/workspace/shell# ./4.sh file2
user selects file2
[email protected]:~/workspace/shell# ./4.sh file
unknow

循环语句:for循环:将当前目录下的文件拷贝到当前目录下的backup中,backup不存在则创建一个。

1 #!/bin/bash
2 flist=`ls` //flist表示当前目录下的所有文件
3 if [ ! -d backup ]
4 then
5 mkdir backup
6 fi
7 for file in $flist //for 变量名 in 变量表 ----> 变量名取变量表中的元素,知道全部取完为止
8 do
9 if [ $# = 1 ]
10 then
11 if [ $1 = $file ]
12 then
13 echo "$file found"
14 exit
15 fi
16 else
17 cp -av $file backup
18 cp $file backup
19 fi
20 done

执行效果:

[email protected]:~/workspace/shell# ls
2.sh 3.sh 4.sh 5.sh b.c hello one.sh
[email protected]:~/workspace/shell# ./5.sh
`2.sh‘ -> `backup/2.sh‘
`3.sh‘ -> `backup/3.sh‘
`4.sh‘ -> `backup/4.sh‘
`5.sh‘ -> `backup/5.sh‘
`b.c‘ -> `backup/b.c‘
`hello‘ -> `backup/hello‘
cp: omitting directory `hello‘
`one.sh‘ -> `backup/one.sh‘

while语句: while 表达式 (表达式真,执行循环),until 表达式 (表达式为假,执行循环)
脚本:

1 #!/bin/bash
2 if [ $# -eq 2 ]
3 then
4 loop=$2
5 else
6 loop=5
7 fi
8 i=1
9 while [ $i -lt $loop ] #until [ $i -gt $loop ]
10 do
11 > $1$i
12 i=`expr $i + 1` //注意是反撇号
13 done
~

执行效果

[email protected]:~/workspace/shell# ls
1 2 2.sh 3 3.sh 4 4.sh 5.sh 7.sh b.c hello one.sh
[email protected]:~/workspace/shell# ./7.sh file 6
[email protected]:~/workspace/shell# ls
1 2.sh 3.sh 4.sh 7.sh file1 file3 file5 one.sh
2 3 4 5.sh b.c file2 file4 hello
[email protected]:~/workspace/shell#

continue 与 break的区别:
continue跳出本次循环,break结束整个循环

脚本:在输入的参数中找打印出偶数

1 #!/bin/bash
2 if [ $# -eq 0 ]
3 then
4 echo "please input some seguments"
5 exit
6 fi
7 if [ $# -gt 10 ]
8 then
9 echo "too many seguments"
10 exit
11 fi
12 for num
13 do
14 count=`expr $num % 2`
15 if [ $count -eq 1 ]
16 then
17 continue
18 else
19 output="$output $num"
20 fi
21 done
22 echo "enen num is $output"
23

执行效果:

[email protected]:~/workspace/shell# ./8.sh 1 2 3 4 5 6
enen num is 2 4 6

注:vim中冒号加行号直接跳到指定的行号,例如 :10,直接到10行

shell函数:
1.定义方式
2.参数传递
3.函数体类变量的引用

shell中函数定义不需要写参数,函数体内调用参数用$1,$2,.....,传递参数直接在函数名后面添加参数!
例:sum()
脚本:

1 #!/bin/bash
2 sum()
3 {
4 a=$1
5 b=$2
6 n=`expr $a \* $b`
7 echo "n is $n"
8 }
9 sum $1 $2
10

执行效果:
[email protected]:~/workspace/shell# ./9.sh 2 3
6

函数的返回值调用用反撇号:

返回状态:
1.有return 返回return的值,
2.没有return ,返回最后一条指令的返回状态

脚本:
1 #!/bin/bash
2 sum()
3 {
4 a=$1 //表示传递的第一个参数
5 b=$2 //表示传递的第二个参数
6 n=`expr $a \* $b`
7 echo "n is $n"
8 }
9 #c=2
10 #d=3 *******************
11 #member=`sum $c $d` * //函数调用 *
12 member=`sum 2 3` * //用了反撇号 *
13 echo $member *******************

执行效果:
[email protected]:~/workspace/shell# ./9.sh
n is 6

查找已登录的指定用户:
脚本:
1 #!/bin/bash
2 check_user()
3 {
4 user=`who | grep $1 | wc -l`
5 if [ $user -eq 0 ]
6 then
7 return 0
8 else
9 return 1
10 fi
11 }
12 while true
13 do
14 echo "Input username"
15 read uname
16 check_user $uname
17 if [ $? -eq 1 ]
18 then
19 echo "user $uname online"
20 else
21 echo "user $uname online"
22 fi
23 done

执行效果:

[email protected]:~/workspace/shell# ./11.sh
Input username
lg
user lg online
Input username
root
user root online
Input username

shell的变量:

1.声明局部变量:local var=5 //关键字:local
局部变量只在定义的函数体内起作用
2.全局变量:定以后,作用于脚本内任何地方
3.独立于文件之外的变量:export var=50;多个脚本公用这个变量! //关键字export ,
修改配置文件可永久作用于文件!
脚本:
1 #!/bin/bash
2 scope()
3 {
4 local a=1 //局部变量
5 b=2 //全局变量
6 echo "a in function = $a"
7 echo "b in function = $b"
8 }
9
10 scope
11 echo "a in function = $a"
12 echo "b in function = $b"
13

执行效果:

[email protected]:~/workspace/shell# ./12.sh
a in function = 1
b in function = 2
a in function =
b in function = 2
[email protected]:~/workspace/shell#

关于PCB的学习心得:
1.要想在原理图中显示其他的字体,
需要使能pcb editor下面的True type fonts (options->preference)

2.在PCB布线的时候,首先将字符串信息隐藏,这样可以减少布线干扰:
PCB面板左下角有个LS,点击,弹出面板的最上面一排有个Show/Hide,里面可以设置

3.双面板,可以先铺设电源和地,用焊盘或者过孔代替固定孔,添加一个后复制粘贴即可!

4.在对画好的PCB进行铺铜的时候,直接点击Place下面的铺铜,在里面更改顶层和底层也是很方便的,
在铺铜结束后,可以整理一下字符串,这个时候可以先把铜箔隐藏,参考心得2

API : 系统调用及用户编程接口

linux系统调用,按照系统调用功能逻辑大致分为:进程控制,进程间通信,文件系统控制,系统控制,存储管理,
socket控制,用户管理等几类!

Linux中的文件主要分为4种:普通文件,目录文件,链接文件,设备文件。

一个进程启动时,都会打开3个文件:标准输入,标准输入,标准出错处理,分别对应的文件描述符0,1和2
(在程序中分别宏替换为:STDIN_FILENO,STDOUT_FILENO和STDERR_FILENO,学会巧妙运用这些宏替换)

IO操作的系统调用,主要用到5个函数:open(),read(),write(),lseek(),close().
int open(const char *pathname,int flags,int perms)
成功:返回文件描述符,失败:-1
pathname :被打开的文件
O_RDONLY:只读
o_WRONLY:只写
O_RDWR:读写
O_CREAT:如果文件不存在,则创建一个,并用第三个参数为其设置权限

int close(int fd)
0:成功 -1:出错

ssize_t read(int fd,void *buf,size_t count)
成功:返回读到的字节数; 失败:-1; 0:表示已读到文件尾

ssize_t write(int fd,void *buf,size_t count)
成功:已写的字节数 ;-1:出错

off_t lseek(int fd,off_t offset,int whence)
成功:文件当前位移,-1:出错

总结一下5个函数的功能:
open()函数用于打开或者创建文件,在打开或者创建文件时可以指定文件的属性及用户的权限等各种参数。
close()函数用于关闭一个被打开的文件
read() 函数用于将从指定的文件描述符中读出的数据放到缓冲区中,并返回实际读出的字节数,若返回0,
则表示没有数据可读,即已经到达文件尾。读操作从文件当前指针位置开始,从终端设备文件中读取数据时,
通常最多一次一行
write()函数用于向打开的文件写数据,写操作从文件当前指针位置开始,对磁盘进行写操作,若磁盘已满或者
超出该文件的长度,返回失败。
lseek()函数用于在指定的文件描述符中将文件指针地位到相应的位置;

实例程序:/*此程序属于华清远见编写,个人觉得对学习文件这块知识挺好的,摘录了下来*/
1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcn1.h>
5 #include <stdio.h>
6 #include <stdlib.h>
7
8 #define BUFFER_SIZE 1024 //每次读写缓存大小,影响运行效率
9 #define SRC_FILE_NAME "src_file" //源文件名
10 #define DEST_FILE_NAME "dest_file" // 目标文件名
11 #define OFFSE 10240 //复制数据大小
12
13 int main()
14 {
15 int src_file,dest_file;
16 unsigned char buff[BUFFER_SIZE];
17 int real_read_len;
/* 以只读方式打开源文件*/
18 src_file = open(SRC_FILE_NAME,O_REONLY);

/*以只写方式打开目标文件,如果文件不存在则创建该文件,访问权限值为644*/
/*S_I(R/W/X)(URP/GRP/OTH) R/W/X 表示读写执行权限 (URP/GRP/OTH)分别表示所有者,用户组,其他用户
dest_file = open(DEST_FILE_NAME,O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
20
21
22 if(src_file < 0 || dest_file < 0)
23 {
24 printf("open file error\n");
25 exit(1);
26 }
/*将源文件的读写指针移动到最后10K的起始位置*/
27 lseek(src_file,-OFFSET,SEEK_END);
/*读取源文件的最后10KB数据并写到目标文件中,每次读写1KB*/
28 while((real_rea_len = read(src_file,buff, sizeof(buff))) > 0)
29 {
30
31 write(dest_file,buff,real_read_len);
32 }
33 close(dest_file);
34 close(src)_file);
35 return 0;
36 }

时间: 2024-08-26 00:47:52

2015.1.21学习笔记和心得!的相关文章

Eclipse IDE 使用技巧 (Eclipse工作空间小技巧)(自己的一些学习笔记和心得,记录下来,备忘录和复习使用)

很多人觉得Eclipse不就是个开发工具吗,有什么好讲的啊,其实这种想法是错误的,Eclipse IDE集成开发环境里面有很多的玄机,有很多的技巧和设置,是很多4-5年的java程序员都不常应用到的甚至是不知道的,所以我觉得有必要把自己的一些Eclipse的心得和使用技巧跟大家分享一下吧.大家相互的学习,只有不断的学习和汲取新的知识才能不断的提高自己! 中国有句老话叫做,工欲善其事,必先利其器.我们把Eclipse里面的一些设置和小技巧掌握之后,对我们的开发效率来说可以大大的提高,对我们写代码也

Python3学习笔记与心得(一)

一.Python起源 自从20世纪90年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务和Web编程. Python的创始人为Guido van Rossum,人称“龟叔”.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承.之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者.ABC是由Guido参加设计的一种教学语言.就Guido本人看来,AB

Python3学习笔记和心得(二)

数据类型 一.数字(int) Python可以处理任意大小的正负整数,但是实际中跟我们计算机的内存有关,在32位机器上,整数的位数为32位,取值范围为 -2**31-2**31-1,在64位系统上,整数的位数为64位,取值范围为-2**63-2**63-1.对于int类型,需要掌握的方法不多,看 下面的几个例子: 1 2 3 4 5 6 a=4 print(a.bit_length()) # 4在二进制中可以用最少3位 100 来表示4,所以输出3 print(int('4'))       #

2015.12.01学习笔记

本日学习课程简介:RAID,LVM,ip配置, 磁盘列阵 RAID 即为「Redundant Array of Independent Drives」或「Redundant Array of Inexpensive Drives (or Disks)」的简写,一般俗称「磁盘阵列」,就是以两台或更多的硬盘,组成一个或增加传输速度,或增大总容量,或增加文件备份的大磁盘. NO RAID 正常的数据存储,一但磁盘损坏,数据丢失,无任何安全性 RAID0 将数据平均分散在所有硬盘内,传输速度快,但一台硬

卷积神经网络学习笔记与心得(3)卷积

数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值. 从卷积的效果来看,在二维图像上进行卷积时,卷积核对所在区域上符合某种条件的像素赋予较多的权重,其他的像素赋予的权重较少,这可以看作是一种滤波行为,因此卷积神经网络的卷积核有时也被称为滤波器,卷积核所在区域被称为局部感知域.若局部感知域中存在像素符合加较大权重的条件,称这些像素具有某种特

2015.7.12学习笔记

wget http://mirrors.163.com/.help/CentOS{6/7}-Base-163.repo 下载163的yum源替换本机/etc/yum.repo.d/下的repo文件即可 安装内核编译环境 yum install Development lib 和yum install ncrses deve 下载内核 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.12.44.tar.xz 此为3.12.44 的

Python3学习笔记和心得(四)

初识装饰器(decorator ) Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数. 使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = decorate(f) 这样的代码. 先看一个例子: #!/usr/bin/env python def outer(func): print('这是outer.') def inner(): print('这是inner.') func() print('这是最后.

卷积神经网络学习笔记与心得(2)数据集

机器学习领域有很多现成的数据集,它们由个人或组织制作.整理,且向外界公开下载,比如在字符识别领域有mnist数据集等,数据挖掘领域有Iris,Adult数据集等.这些数据集为相关技术研究者提供了很大的便捷,有了这些资源,研究者就可以把更多的精力放在模型的研究上,可以说这些数据集的制作整理者对推动数据挖掘和机器学习的发展做出了巨大的贡献. 不过,在不少情况下,这些数据集未必能满足我们的需求,这时就要我们自己制作数据集了.不得不说,这次的字符识别项目中制作数据集的经历着实让我感受到了那些数据整理者的

卷积神经网络学习笔记与心得(4)池化

图片经过卷积.激活后的结果一般带有大量原图信息. 上图中卷积核提取的是竖直方向上的连续像素,但是,被增强的像素只占了结果的1/3,对于多层网络,其余重要性较低的信息也被传入了下一层网络,造成了不必要的浪费,因此需要用池化对卷基层得到的结果做聚合统计.池化的理论基础是:图像相邻位置的像素是相关的,即使间隔一段尺寸对图像进行采样,得到的结果依旧能保持大部分信息.常用的池化方式有最大池化和均值池化.池化的另一个重要作用是为卷积神经网络带来一定的平移.旋转和透视不变性. 上图展示了池化如何为模型带来平移