$?是返回最近一条命令的返回值,echo $total,$?的意思是返回echo $total的返回值,这里肯定是成功返回,自然是0了,如果需要fSum返回值,那么需要在fSum命令后直接$?即可.
创新互联是一家集网站建设,上党企业网站建设,上党品牌网站建设,网站定制,上党网站建设报价,网络营销,网络优化,上党网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
subShellInfo=$(fSum 3 2)
total=$?
echo $total,$?
那么就显示5 0
其中subShellInfo是子进程中所有输出信息,第一个$?是子进程返回值
常用的命令有好多啊,你刚开始学,不用特意的去记,用到什么学什么就好了。 当然非要列举,下面列举的100条,是来自百度经验上的。 希望对你有帮助。
Linux常用命令大全100条:
1,echo “aa” 》 test.txt 和 echo “bb” 》》 test.txt
//》将原文件清空,并且内容写入到文件中,》》将内容放到文件的尾部
2,chmod go+w -R /home/zhangy //给组用户和其他用户添加写的权限
3,tar -tzvf test.tar.gz //列出归档内容
4,du -ah //查看文件列表大小
5,du -sh //查看所有文件的大小总和
6,echo ‘1+2’|bc -l //数学运算
7,uname -a //查看linux内核等的一些信息
8,badblocks -s /dev/sda //坏道扫描时显示进度
9,time command //查看命令的运行时间
10,ls -lrt //按时间的倒序排序
11,rsync -P //同步时显示进度
12.history -c //清楚历史命令
13,cd - //返回上次目录
14,tree //显示目录树
15,umount -n /mnt/hda2 //强制卸载
16,echo ~/ //显示用户的home目录
17,echo $[5*5] //算术运算
18,echo $((5*5)) //算术运算
19,eval ls;ps aux|grep httpd //这二个命令都能执行
20,free -m //有MB为单位显示内存
21,uptime
//显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载
22,加法运算
[root@krlcgcms01 mytest]# let a=34+3;
[root@krlcgcms01 mytest]# echo $a;
23,export //查看所有环境变量
24,echo $PATH //查看单个变量
25,cmp file1 file2 //文件内容比对
26,clear //清屏
27,echo 23423 |awk --re-interval ‘/[0-9]{3,}/’ //如果不加re-interval的话,不显示
28,cal //得到一个整齐的日历格式
29,wc -l //统计行数,wc -w 统计单词
30,echo “AaDCbd23” |tr “[A-Z]” “[a-z]” 大写变小写,echo “AaDCbdc23” |tr -c b-d =
将b-d之外的字符串替换成=
31,echo “ADSF” | iconv -f UTF8 -t GBK //把字符由utf8转成gbk
-f是from和简写,-t好像terminal的简写
32,cat -n file //内容的前面会显示行号
33,chattr +i file //只读,root用户也没法对其进行修改
34,lsattr file //查看文件属性
35,cat /etc/passwd |awk -F: ‘{print $1}’ //查看系统中所有用户
36,cat /etc/group //查看系统中所有的组
37,groups //查前当前用户所在的,所有组
38,usermod -g 组名 用户 //这种方式是覆盖的方式,用的时候要小心,如果用户A性于mysql usermod -g php
mysql这样的话只属于php了
39,usermod -G 组名 用户 //这种方式是增加的方式,如果用户A性于mysql usermod -g php
mysql这样的话,mysql就属于2个组了
40,bc //进入数学计算中去
41,umask 003 u权限是7,g权限是7,其他用户是4,也就是774,777-003=774
42,mkfs -t vfat /dev/hda6 //将移动硬盘里面的一个分区格式化成vfat格式
43,mount /dev/cdrom /media/cdrom //挂载cdrom
44,getent group 532 //通过组ID,来查找组信息
45,last //登录成功用户记录
46,lastb //登录不成功用户记录
47,dump -S /dev/sda2 //查看一下要备份/dev/sda2所要的容量
48,dump -0j -f /dev/hda2/sda2_bak.dump.bz2 /dev/sda2 //将sda2进行备份并压缩
49,restore -t -f /dev/hda2/sda2_bak.dump //查看备份信息
50,restore -r -f /dev/hda2/sda2_bak.dump //还原备份
51,fc-list //查看系统中安装的字体
52,find 。/ -type f -exec grep -q “root” {} ; -exec echo {} ;
//查找目录下文件所包涵的字符串
53,vmstat 5 //每5显示一下次系统信息,cpu,memory,i/o等
54,top 后 在shift + P 所占进程的排序显示
55,top 后 在shift + M 所占内存的排序显示
56,iptraf -g //查看各个接口的流量
57,ostat -d -x /dev/sda2 2 //用iostat查看磁盘/dev/sda2的磁盘i/o情况,每两秒刷新一次
58, paste -sd ‘|||n’ test //文件的每4行转换成1行,并用|隔开
59,lsof -i :22 //知道22端口现在运行什么程序
60,lsof -c abc //显示abc进程现在打开的文件
61,lsof -p 12 //看进程号为12的进程打开了哪些文件
63,route //查看路由信息
64,ifup //开启网卡
65,ifdown //关闭网卡
66,route del -net 172.168.0.0 netmask 255.255.0.0 dev eth0 //删除
172.168这个网段
67,route add -net 172.168.10.0 netmask 255.255.255.0 dev eth0 //增加一个路由
68,netstat -tunl //列出监听的网络服务端口
69,netstat -tun //列出已连接的网络服务端口
70,nmap -sP 172.30.4.0/24 //在这个网段内有多少用户在我的主机上操作,一个不错的安全检查工具
71,vgdisplay //查看系统中的可用空间
72,lvextend -L+20G /dev/tank/part1 //向part1这个分区增加20G的空间
73,lvresize -L-10G /dev/tank/part2 //向part2这个分区减少10G的空间
74,pvdisplay //查看磁盘信息
75,mplayer -loop 10 /mnt/song/music/花儿开了.mp3 //循环播放10遍
76,pacman -S firefox -nd //nd去掉依赖
77,wget -c //断点下载
78,chroot /mnt/ubuntu //改变根目录到/mnt/ubuntu
79,ctrl+a //命令行下,光标称动到开头
80,ctrl+e //命令行下,光标移动结尾
81,cut -d: -f 1-4 test //用:分割文件,取分割后的1-4列
82,file /home/zhangy/test.php //用于查看文件的一些基本信息
83,touch test.txt //创建一个空文件 text.txt
84,htpasswd -cbd /usr/local/nginx/conf/authfile //创建访问控制文件
85,df //查看磁盘空间,和当前的磁盘数
86,fdisk -l //查看所有磁盘数
87,alsamixer //进入后,m键可以实现静音
88,killall httpd //把所有httpd进程杀掉
89,killall -9 mysqld_safe //有些进程超级用户也停止不了,-9是强制删除
90,mirror /mysql //下载mysql目录
91,mirror -R /mysql //上传mysql目录
92,rmmod pcspkr //关掉tab提示音
93,modprobe pcspkr //开启tab提示音
94,gpasswd -a zhangy wheel //将zhangy这个用户添加到wheel这个组
95,dd if=/dev/zero of=/virtual/ubuntu.virt.img bs=1M count=4096
//创建一个4G的IMG镜像
96,lspic //显示pci设备
97,lsusb //显示usb设备
98,history | less //less根more有点像,感觉less用着更舒服点
99,ln -s //如果忘了-s就变成硬链接了
100,tar zxvf test.tar.gz -C /home/zhangy //将内容解压到指定目录
linux命令行计算器
详细文档请 man bc
在windows下,大家都知道直接运行calc,(c:\windows\system32\calc.exe),可以打开计算器。
注:
calculate vt.vi.
计算;calculator n. 计算器。calc就是这个计算的简写。
Ca在化学中是代表钙元素,calcium
钙(20号元素,符号Ca)。两者有什么联系呢?
calculate 来自calculus,原义是做算术运算的小石子,是calx(石灰石)的小称。
那么在linux系统下,有无与windows下calc.exe类似的计算器呢?
下面总结linux下的三个命令,来介绍一下linux下的计算方法:
1)bc
bc在默认的情况下是个交互式的指 令。在bc工作环境下,可以使用以下计算符号:
+ 加法
- 减法
* 乘法
/ 除法
^ 指数
% 余数
如:
#
bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3+6
=加法
9
4+2*3 =加法、乘法
10
(4+2)*3 =加法、乘法(优先)
18
4*6/8
=乘法、除法
3
10^3
=指数
1000
18%5 =余数
3+4;5*2;5^2;18/4
=一行输入多个计算,用;相隔。
7
10
25
4
quit =退出
# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=3
=设小数位
1/3
.333
quit
以上是交互的计算,那到也可以 不进行交互而直接计算出结果。
A.用echo和|法,如:
# echo "(6+3)*2" |bc
18
# echo 15/4 |bc
3
# echo "scale=2;15/4"
|bc
3.75
# echo "3+4;5*2;5^2;18/4"
|bc
7
10
25
4
另外,
bc除了scale来设定小数位之外,还有ibase和obase来其它进制的运算。
如:
//将16进制的A7输出为10进制, 注意,英文只能大写
# echo "ibase=16;A7"
|bc
167
//将2进制的11111111转成10进制
# echo "ibase=2;11111111"
|bc
255
//输入为16进制,输出为2进制
# echo "ibase=16;obase=2;B5-A4"
|bc
10001
对于bc还有补充,在bc --help中还可以发现:bc后可以接文件名。如:
# more calc.txt
3+2
4+5
8*2
10/4
# bc calc.txt
5
9
16
2
2)expr
expr命令可不光能计算加减乘除哦,还有很多表达式,都可以计算出结果,不过有一点需要注意,在计算加减乘除时,不要忘了使用空格和转义。下
面直接用实例来介绍一下expr的运算,如:
# expr 6 +
3
(有空格)
9
# expr 2 \*
3
(有转义符号)
6
# expr 14 % 9
5
# a=3
# expr
$a+5
(无空格)
3+5
# expr $a +
5
(变量,有空格)
8
#
a=`expr 4 + 2`
echo $a
6
# expr $a + 3
9
另外,expr对于字串的操作(计算)也是很方便的,如:
//字串长度
# expr length
"yangzhigang.cublog.cn"
21
//从位置处抓取字串
# expr substr "yangzhigang.cublog.cn"
1 11
yangzhigang
//字串开始处
# expr index
"yangzhigang.cublog.cn" cu
13
3)dc
用dc来进行计算的人可以不多,因为dc与bc相比要复杂,但是在进行简单的计划时,是差不多的,不算难。dc为压栈操作,默认也是交互的,但
也可以用echo和|来配合打算。
如:
# dc
3
2+
p
5
4*
p
20
quit
# echo 3 2+ 4* p |dc
20
4)echo
echo用来进行回显,是周知的事。上面也配合bc来进行计算。其实echo也可以单独进行简单的计算,如:
# echo $((3+5))
8
# echo $(((3+5)*2))
16
echo还可以进行变量的计算,如:
# a=10
# b=5
# echo $(($a+$b))
15
# echo $a+$b
10+5
# echo $a+$b |bc
15
//计算前天的日期
# echo `date
+%Y%m%d`
20090813
# echo `date +%Y%m%d`-2
20090813-2
# echo `date +%Y%m%d`-2
|bc
20090811
5)AWK
awk在处理文件的时,可以进行运算,那当然也可以单单用来计算了,如:
# awk 'BEGIN{a=3+2;print
a}'
5
# awk 'BEGIN{a=(3+2)*2;print
a}'
10
Awk 支持常见的运算符, 如 + (加),- (减), * (乘), / (除), ^ 或 ** (乘方), % (取模)
等等。 此外, awk 也提供了一些常用的数学函数, 比如 sin(x), cos(x), exp(x), log(x),
sqrt(x), rand()。 使用这些运算符和函数可以直接进行一些简单的运算:
# echo | awk '{print
8+6}'
14
# echo | awk '{print
8/6}'
1.33333
# echo | awk '{print
9%5}'
4
请放心使用
有问题的话请追问
满意请及时采纳,谢谢
其声明如下:
type __sync_fetch_and_add (type *ptr, type value, ...)
type __sync_fetch_and_sub (type *ptr, type value, ...)
type __sync_fetch_and_or (type *ptr, type value, ...)
type __sync_fetch_and_and (type *ptr, type value, ...)
type __sync_fetch_and_xor (type *ptr, type value, ...)
type __sync_fetch_and_nand (type *ptr, type value, ...)
type __sync_add_and_fetch (type *ptr, type value, ...)
type __sync_sub_and_fetch (type *ptr, type value, ...)
type __sync_or_and_fetch (type *ptr, type value, ...)
type __sync_and_and_fetch (type *ptr, type value, ...)
type __sync_xor_and_fetch (type *ptr, type value, ...)
type __sync_nand_and_fetch (type *ptr, type value, ...)
这两组函数的区别在于第一组返回更新前的值,第二组返回更新后的值。
type可以是1,2,4或8字节长度的int类型,即:
int8_t / uint8_t
int16_t / uint16_t
int32_t / uint32_t
int64_t / uint64_t
后面的可扩展参数(...)用来指出哪些变量需要memory barrier,因为目前gcc实现的是full barrier(类似于linux kernel 中的mb(),表示这个操作之前的所有内存操作不会被重排序到这个操作之后),所以可以略掉这个参数。
bool __sync_bool_compare_and_swap (type *ptr, type oldval type newval, ...)
type __sync_val_compare_and_swap (type *ptr, type oldval type newval, ...)
这两个函数提供原子的比较和交换,如果*ptr == oldval,就将newval写入*ptr,
第一个函数在相等并写入的情况下返回true.
第二个函数在返回操作之前的值。
__sync_synchronize (...)
发出一个full barrier.
关于memory
barrier,cpu会对我们的指令进行排序,一般说来会提高程序的效率,但有时候可能造成我们不希望得到的结果,举一个例子,比如我们有一个硬件设备,它有4个寄存器,当你发出一个操作指令的时候,一个寄存器存的是你的操作指令(比如READ),两个寄存器存的是参数(比如是地址和size),最后一个寄存器是控制寄存器,在所有的参数都设置好之后向其发出指令,设备开始读取参数,执行命令,程序可能如下:
write1(dev.register_size,size);
write1(dev.register_addr,addr);
write1(dev.register_cmd,READ);
write1(dev.register_control,GO);
如果最后一条write1被换到了前几条语句之前,那么肯定不是我们所期望的,这时候我们可以在最后一条语句之前加入一个memory barrier,强制cpu执行完前面的写入以后再执行最后一条:
write1(dev.register_size,size);
write1(dev.register_addr,addr);
write1(dev.register_cmd,READ);
__sync_synchronize();
write1(dev.register_control,GO);
memory barrier有几种类型:
acquire barrier : 不允许将barrier之后的内存读取指令移到barrier之前(linux kernel中的wmb())。
release barrier : 不允许将barrier之前的内存读取指令移到barrier之后 (linux kernel中的rmb())。
full barrier : 以上两种barrier的合集(linux kernel中的mb())。
还有两个函数:
type __sync_lock_test_and_set (type *ptr, type value, ...)
将*ptr设为value并返回*ptr操作之前的值。
void __sync_lock_release (type *ptr, ...)
将*ptr置0
示例程序:
#include stdio.h
#include pthread.h
#include stdlib.h
static int count = 0;
void *test_func(void *arg)
{
int i=0;
for(i=0;i20000;++i){
__sync_fetch_and_add(count,1);
}
return NULL;
}
int main(int argc, const char *argv[])
{
pthread_t id[20];
int i = 0;
for(i=0;i20;++i){
pthread_create(id[i],NULL,test_func,NULL);
}
for(i=0;i20;++i){
pthread_join(id[i],NULL);
}
printf("%d\n",count);
return 0;
}
awk '{getline s "第一个文件"
split(s,array)
for (i=1;i=NF;i++) $i=$i-array[5+i]
print }' 第二个文件
结果
9761 98.895 10 1 98.896
我在自己机器上试了,发给你:
date +%Y%m%d%H%M%S -d "`date +%Y%m%d` +695 second"
加上695秒之后结果是20121218001135 零点11分35秒。
这里695你自己换自己需要的,也可以做成$参数。
注意:"`date 这里双引号右边是反引号,也就是Tab上面那个键,我不知道你的Linux水平,所以提示一下。