初学Linux(3)
来源:互联网 发布:优化xp电脑批处理工具 编辑:程序博客网 时间:2024/05/18 12:39
使用bash命令历史
history命令可查询历史操作命令
.bash_history中的命令数目由HISTFILESIZE这个变量决定
history表存储在内存内。用户logout时会记录到用户主目录中.bash_history文件
命令历史中的命令可以被调用 如 下方例子:
[hadoop@bi-test home]$ !! 执行上一次命令
bash
[hadoop@bi-test ~]$ !960 执行第960号命令
ls
1103.log 15-11-03.log a1.txt a.txt b.txt c ddd
[hadoop@bi-test ~]$ ls ./ddd 一个ls命令(表示上一个命令)
a1.txt b.txt
[hadoop@bi-test ~]$ !$ 用来显示上一个命令的参数 即./ddd
./ddd
bash: ./ddd: is a directory
Bash的变量类型:
[hadoop@bi-test ~]$ set 显示出来的Shell的普通变量和环境变量
[hadoop@bi-test ~]$ env 显示出来的Shell的环境变量
如果只是定义AAA=aaaaaaaa 这是一个普通变量
使用 export AAA=aaaaaaaa就变成了环境变量
alias别名:
[hadoop@bi-test ~]$ alias ooo='echo $PATH' 给echo $PATH 命令取一个别名为ooo
[hadoop@bi-test ~]$ ooo 执行ooo 相当于执行 echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/hadoop/bin
[hadoop@bi-test ~]$ unalias ooo 将上方别名删除
[hadoop@bi-test ~]$ ooo
bash: ooo: command not found
Bash中的运算符:
[hadoop@bi-test ~]$ echo * 用来显示任意多个字符,默认是当前目录的文件名和文件夹名
1103.log 15-11-03.log a1.txt a.txt b.txt c ddd
[hadoop@bi-test ~]$ echo ??? 用来显示当前目录有三个字母的文件或者文件夹名
ddd
[hadoop@bi-test ~]$ echo [abc]* 用来显示当前目录以abc任意一个字母开头的文件和文件夹名
a1.txt a.txt b.txt c
[hadoop@bi-test ~]$ echo [^abc]* 用来显示当前目录不是以abc其中任何一个开头的文件和文件夹名
1103.log 15-11-03.log ddd
[hadoop@bi-test ddd]$ ls 显示当前目录为空
[hadoop@bi-test ddd]$ touch {a,b,c}-{1,2,3} 创建文件名字为a-c,和1-3的自由组合
[hadoop@bi-test ddd]$ ls 显示当前目录的文件,即前面一个命令执行后的成果
a-1 a-2 a-3 b-1 b-2 b-3 c-1 c-2 c-3
[hadoop@bi-test ddd]$ touch ./ccc{a,c} & 将一个创建文件的命令 放到后台运行
[1] 8508
[hadoop@bi-test ddd]$ jobs 通过jobs命令查看后台运行的任务
[1]+ Done touch ./ccc{a,c}
[hadoop@bi-test ~]$ jobs 查看后台任务
[1]+ Stopped top
[hadoop@bi-test ~]$ fg %1 通过fg %1命令将后台第一个任务恢复到前台
[hadoop@bi-test ~]$ aaa() 声明一个aaa函数 ()代指声明的作用
> { 以 { 开始
> echo this is aaa 执行 echo 命令
> ls ./ 执行 ls 命令
> echo end 执行 echo 命令
> } 以 } 结束
[hadoop@bi-test ~]$ aaa 执行 aaa 运行结果 如下:
this is aaa
1103.log 15-11-03.log a1.txt a.txt b.txt c oo.log
end
“” ‘’的区别 : “”只屏蔽 空格这个符号 ‘’屏蔽所有特殊符号
[hadoop@bi-test ~]$ `` 这个符号代表将其中的命令预先执行。
\ 脱意符
[hadoop@bi-test ~]$ echo ; which ls 符号 ; 的作用是命令分隔符
alias ls='ls --color=auto'
/bin/ls
= 是赋值
[hadoop@bi-test ~]$ [ -f ./c ] && echo ok [ -f ./c]意思是判断当前目录下是否有c文件, &&意思是前一个命令返回true的情况下,才执行后面的命令
ok
[hadoop@bi-test ~]$ [ -f ./r ] || echo no filr r || 的意思是如果前面的命令返回的结果是false 则执行后面的命令
no filr r
[hadoop@bi-test ~]$ [ -d ./ccc ] && echo already exist -d代表判断是不是目录
already exist
[hadoop@bi-test ~]$ echo $$ 代表的是当前进程的pid
8378
[hadoop@bi-test ~]$ echo $[ 2+3 ] $[ ]代表的是 算术运算符 即 2+3=5 所以echo出来 结果是5
5
Bash的启动脚本:
全部设置文件 /etc/profile
/etc/bashrc
用户设置文件 ~/.bash_profile
~/.bashrc
其他配置脚本:
~/.bash_logout 当你退出shell时,要执行的脚本
~/.bash_history 记录了您以前输入的脚本
~/.bash_profile 当你登入shell时,要执行的脚本
~/.bashrc 每次打开新的shell时,要执行的脚本
~/.bash_profile和 ~/.bashrc的区别:~/.bash_profile只在会话开始时被读取一次,而~/.bashrc 则每次打开新的终端时,都要被读取。
/etc/profile.d目录下的文件也会在用户登录时执行,但必须是有可执行权限的文件,且其他用户也要有可执行权限
shell脚本:
shell脚本的种类 有: -Shell script python perl等
系统是由shell脚本搭建的
- 如/etc/rc.d/rc.sysinit
- 或 services 命令等
Shell脚本一般是hiASCII码的文本,可以直接编写
脚本中的#表示注释,但是第一行中的#有特殊的意义:
如果第一行中:
第一个字符非#,表示这是一个bash脚本。
第一个字符是#,但第二个字符不是!,表示这是一个csh脚本。
第一个字符是#,且第二个字符是!,
例子: #!/usr/bin/python2.2
表示调用其后指定的/usr/bin/python2.2程序来执行以下的这个脚本。
reset 命令是将终端恢复打开时的状态
自己写一个简易的shell脚本 如下:
if [ $1 -eq 111 ]; then 判断输入的第一个参数是不是111
echo ok 如果判断正确,则输出ok
fi 判断结束
echo $2 \$2 打印第二个参数
echo $3 \$3 打印第三个参数
echo $# \$\# 打印一共输入了几个参数
echo $? \$\? 打印上一个命令是否执行 0代表执行,1代表没执行
echo $$ \$\$ 打印当前进程pid
read -p "please input your name:" AAA 当脚本运行时,会有一个交互,让你输入字符串,赋值给了AAA
printf "$AAA is fool. \n" 把AAA的值打印出来,并且换行
说明 . ./ 和./的区别:
[hadoop@bi-test ~]$ ./a.txt 这种是指打开一个子shell来执行a.txt
./a.txt: line 1: [: -eq: unary operator expected
$2
$3
0 $#
0 $?
8836 $$
please input your name:qwewq
qwewq if fool.
aaaaaaaa
[hadoop@bi-test ~]$ echo $AAA 然后你执行这个命令 AAA是无法打印的。原因就是:子shell里定义的环境变量,在父shell中无法使用
[hadoop@bi-test ~]$ . ./a.txt 这种是指,在当前的shell中执行a.txt
bash: [: -eq: unary operator expected
$2
$3
0 $#
0 $?
8700 $$
please input your name:edfg
edfg if fool.
aaaaaaaa
[hadoop@bi-test ~]$ echo $AAA 执行的这个命令后,会打印AAA的值
aaaaaaaa
Shell脚本的执行方式
方法一、输入脚本的绝对路径或相对路径 例如 - /tmp/a.txt或者是./a.txt
方法二、bash 脚本 或 tcsh脚本 例如 - bash /tmp/a.txt
方法三、再脚本的路径前加“.” 例如 - . ./a.txt 或者是 - . /tmp/a.txt
前两种本质是打开一个子shell 去执行,后一种是在当前的shell中执行
shell 脚本 使用判断:
[hadoop@bi-test ~]$ cat a1.txt 查看写的shell脚本
if [ $1 = hadoop ] 判断输入的参数 是不是hadoop
then
echo 'I am hadoop !'判断正确时 打印这句话
elif [ $1 = wang ] 判断输入的参数 是不是wang
then
echo 'I am wang !'
else 如果判断是false则,输出下一句话
echo 'You are not user'
fi
[hadoop@bi-test ~]$ ./a1.txt hadoop 执行上面那个脚本,同时输入参数
I am hadoop !
shell调试
[hadoop@bi-test ~]$ bash -vx ./a1.txt 使用-v可以一边执行脚本,一遍将执行过的脚本命令打印到标准错误输出
#!/bin/bash 使用-x可以将执行过的每一条命令和结果依次打印出来
read AAA
+ read AAA
aaa
if [ $AAA = hadoop ]
then
echo 'I am hadoop !'
elif [ $AAA = wang ]
then
echo 'I am wang !'
else
echo 'You are not user'
fi
+ '[' aaa = hadoop ']'
+ '[' aaa = wang ']'
+ echo 'You are not user'
You are not user
[hadoop@bi-test ~]$ bash -vx ./b.txt 调试b.txt脚本
#!/bin/bash
read AAA
+ read AAA
hadoop 输入变量的值
case $AAA in case判断
wang) 如果是wang 执行下面的操作
echo 'hello wang'
;; 跳出case
hadoop) 如果是hadoop 执行下面的操作
echo 'hello hadoop'
;;
*) 如果是其他字符 执行下面的操作
echo "I don\'t kown the user who he is"
;;
esac case判断结束
+ case $AAA in 这是执行的语句
+ echo 'hello hadoop'
hello hadoop
数值比较时的运算符:
相同用 -eq 例如:[hadoop@bi-test ~]$ [ 2 -eq 2 ] && echo ok
ok
不同用 -ne 例如:[hadoop@bi-test ~]$ [ 2 -ne 3 ] && echo ok
ok
取反用 !+空格 例如:[hadoop@bi-test ~]$ ! [ 2 -eq 3 ] && echo ok 2不等于3 结果为1 取反 结果为0 然后执行echo
ok
大于用 -gt 例如:[hadoop@bi-test ~]$ [ 2 -gt 1 ] && echo ok
ok
小于用 -lt 例如:[hadoop@bi-test ~]$ [ 2 -lt 3 ] && echo ok
ok
大于或等于 -ge 例如:[hadoop@bi-test ~]$ [ 2 -ge 1 ] && echo ok
ok
[hadoop@bi-test ~]$ [ 2 -ge 2 ] && echo ok
ok
小于或等于 -le 例如:[hadoop@bi-test ~]$ [ 2 -le 2 ] && echo ok
ok
[hadoop@bi-test ~]$ [ 2 -le 3 ] && echo ok
ok
为空 -z 例如:[hadoop@bi-test ~]$ [ -z $AAA ] && echo ok AAA变量没有定义 所以为空,所以[ -z $AAA ]结果返回时0 然后执行后面echo
ok
[hadoop@bi-test ~]$ echo $AAA
不为空 -n 例如:[hadoop@bi-test ~]$ export AAA=aaaaaaaa 定义AAA环境变量
[hadoop@bi-test ~]$ [ -n $AAA ] && echo ok [ -n $AAA ]结果返回时0, 执行后面echo
ok
[hadoop@bi-test ~]$ cat c
#!/bin/bash 指定让bash这个程序执行
for aaa in `seq 1 100` seq 1 100 这个是一个1到100的数组 然后for循环
do
echo -n "$aaa " 打印从数组中取出来的数$aaa
sleep 1 睡眠一秒后 继续执行
done
[hadoop@bi-test ~]$ cat e
#!/bin/bash
aa=0
while [ $aa -lt 50 ] while循环 条件是aa的值小于50
do
aa=$[$aa+1] 执行aa++
echo -n "$aa " 打印aa的值
done
[hadoop@bi-test ~]$ echo $[ 3*4 ] 使用$[ ]运算符 计算来两个数的积 输出结果如下:
12
0 0
- 初学Linux(3)
- Linux初学(一)
- 初学Linux(1)
- 初学Linux(2)
- Linux命令(初学)
- linux 常用命令(初学)
- 初学Linux[3]--Linux版本号
- 学习linux总结(初学)
- Linux初学笔记(一)
- 初学linux笔记(一)
- 初学Linux杂记(一)
- 初学linux
- 初学Linux
- linux初学
- 初学linux
- Linux初学
- linux 初学
- 初学linux
- No resource found that matches the given name '@style/Theme.AppCompat.Light'.
- js文件中动态加载另一个js文件
- 基于Nodejs的自动化工具Gulp
- Android PackageManagerService流程详细分析(五)之packages
- Cocoapods安装及其使用详解
- 初学Linux(3)
- Web开发(jsp+javaBean+servlet )之文件上传
- Android属性(property)机制
- mysql linux 下面安装
- Java容器
- 在AS中logcat的设置过滤信息图文教程
- 分布式日志收集之Logstash 笔记(一)
- mysql REPLACE 语句的使用
- 调试