Linux shell基础(一)
1.远程登录主机
ssh 账号@IP/主机名
ssh mark@192.168.0.99
2.Socket文件是内部进程通信的一种特殊文件,可作为和远程主机通信的管道
如: mysql -S /tmp/mysql.socket
3.续行符号
先键入\ =>Enter
./configure \
--with-apache=../apache_$ApacheVersion \
--with-mysql=$MYSQLHOME &&
4.字符集合[]
所列字符范围中的某一个字符
[a-zA-Z0-9] - 代表字符范围
5.括号扩展{}
{a,b,c}\*{d,e,f}
a*d a*e ...
6.转向输入和转向输出
命令或Script. < 输入文件 > 输出文件
sort < unsort_input.txt > sorted_output.txt
7.登陆(login)
登陆主机,login shell 先执行/etc/profile,接着bash检查用户的
主目录中是否有.bash_profile 或 .bash_login 或 .profile,若有
则会读取并执行其中一个文件,执行顺序:
.bash_profile
.bash_login
.profile
满足其中一个即可
8.列出登陆主机后,最近执行过的命令
fc -l
fc -l Number //列出大于或等于 指定编号历史命令
9.read 一次读取一行数据放入数组中
read -a arr < echo ${arr[2]}
dfe
9.读取参数,结合成一个新指令,在进行变量代换后,执行
log="ls -al /data/*.sh"
eval $log
10.locate 关键词
由文件名数据库中,找出包含有"关键词"的文件路径
locate lsof
11.tr 转换或删除字符
tr k K < dataf1
执行结果:dataf1的k换成K字符
tr -d k
执行结果:k字符全删除
12.xargs
由标准输入,安排要执行的命令和参数
find . -name '*.txt' | xargs -n 2 diff
13.在写Script时,为了怕变量写错,造成排错困难,可以规定:
变量要进过设定的程序才能使用,如下:
#!/bin/bash
shopt -s -o nounset <echo $Infomix
改成如下:
#!/bin/bash
shopt -s -o nounset
declare Infomix=50 //declare 定义变量,不会提示 nounset 变量
echo $Infomix
14.在shell Script中,$放在变量名之前,如果需要显示$,
用 \--表示转义
用 ''--也可以得到
I=8
echo \$I 或 echo '$I' //'' 单引号作用:一个所见即所得的字符串(即写什么,就是显示什么)
15.IFS
定义分隔符,default value:空格符,tab字符,换行字符(newline)
#!/bin/bash
PL="root:x:0:0:root:/root:/bin/bash"
IFS=':' //分隔符
j=0 //定义行数
for i in $PL
do
j=$((j+1))
echo 第$j个字段是$i
done
16.数组
B=(123 [8]=188 266)
echo ${B[@]} //取出数组元素
echo ${#B[@]} //数据个数
unset B //取消数组
unset B[0] //取消数组某个元素
17.利用here document,打包C的原始码
#!/bin/bash
echo "正在产生hello.c...."
echo
cat < hello.c
#include
int main(){
printf("Hello world!\n");
return 0;
}
EOF
echo "编译hello.c...."
echo
#编译Hello.c,产生执行文件
gcc -o hello hello.c
#若编译成功,就执行。
if [ $? -eq 0];then
echo "执行hello...."
echo
./hello
else
echo 'Complile ERROR:hello.c'
fi
18.高级变量主题
变量扩展
命令替换
算术扩展
在Bash Shell中,$算符会触发上述3种扩展,形式如下:
${变量名称}---变量扩展---${filename}
$(命令)---命令替换---$(ls /)
$((算术表达式))---算术扩展---$((9+9))
19.测试变量 存在与否用法
${待测变量-默认值}
待测变量,若不存在,返回 默认值;存在,返回 待测变量
unset myname
r=${$myname - 'fuck'}
echo $r
20.${待测变量:-默认值} 与上面相比 多了:测试变量 不存在 或 其值为空,返回 默认值
IamHappy='Feel so good'
r=${IamHappy:+'true'}
echo $r
21. 多文件搜寻方式:
fgrep.sh
#!/bin/bash
exec grep -F ${1+"$@"}
fgrep.sh Mem /proc/meminfo /root/test.txt
$1=Mem 非空,则,${1+"$@"}传回$@,此变量值等于所有位置参数组合起来的:
Mem /proce/meminfo /root/test.txt
grep -F Mem /proce/meminfo /root/test.txt
整理:
${待测变量:-默认值}---回传结果-定是非空值---测不存在或空值
${待测变量:=默认值}---给空值变量设一个默认值---测不存在或空值
${待测变量:?默认值}---检查条件是否完备---测不存在或空值
${待测变量:+默认值}---判断某事是否为真---测试存在且非空
移除:,只测存在性,不测空值
记忆法:
:)---空---测试空
-)---负向---测不存在
=)---设值---给空值变量设一个默认值
?)---有问题---检查条件是否完备后再来执行吧
+)---正向---测试存在
22.字符串截取
语法一:${变量:位置起点}
myname="sheller man"
substr=${myname:4}
echo $substr
语法二:${变量:位置起点:长度}
filename="/etc/apache2"
dir1=${filename:1:3}
echo $dir1
1.远程登录主机
ssh 账号@IP/主机名
ssh mark@192.168.0.99
2.Socket文件是内部进程通信的一种特殊文件,可作为和远程主机通信的管道
如: mysql -S /tmp/mysql.socket
3.续行符号
先键入\ =>Enter
./configure \
--with-apache=../apache_$ApacheVersion \
--with-mysql=$MYSQLHOME &&
4.字符集合[]
所列字符范围中的某一个字符
[a-zA-Z0-9] - 代表字符范围
5.括号扩展{}
{a,b,c}\*{d,e,f}
a*d a*e ...
6.转向输入和转向输出
命令或Script. < 输入文件 > 输出文件
sort < unsort_input.txt > sorted_output.txt
7.登陆(login)
登陆主机,login shell 先执行/etc/profile,接着bash检查用户的
主目录中是否有.bash_profile 或 .bash_login 或 .profile,若有
则会读取并执行其中一个文件,执行顺序:
.bash_profile
.bash_login
.profile
满足其中一个即可
8.列出登陆主机后,最近执行过的命令
fc -l
fc -l Number //列出大于或等于 指定编号历史命令
9.read 一次读取一行数据放入数组中
read -a arr < echo ${arr[2]}
dfe
9.读取参数,结合成一个新指令,在进行变量代换后,执行
log="ls -al /data/*.sh"
eval $log
10.locate 关键词
由文件名数据库中,找出包含有"关键词"的文件路径
locate lsof
11.tr 转换或删除字符
tr k K < dataf1
执行结果:dataf1的k换成K字符
tr -d k
执行结果:k字符全删除
12.xargs
由标准输入,安排要执行的命令和参数
find . -name '*.txt' | xargs -n 2 diff
13.在写Script时,为了怕变量写错,造成排错困难,可以规定:
变量要进过设定的程序才能使用,如下:
#!/bin/bash
shopt -s -o nounset <echo $Infomix
改成如下:
#!/bin/bash
shopt -s -o nounset
declare Infomix=50 //declare 定义变量,不会提示 nounset 变量
echo $Infomix
14.在shell Script中,$放在变量名之前,如果需要显示$,
用 \--表示转义
用 ''--也可以得到
I=8
echo \$I 或 echo '$I' //'' 单引号作用:一个所见即所得的字符串(即写什么,就是显示什么)
15.IFS
定义分隔符,default value:空格符,tab字符,换行字符(newline)
#!/bin/bash
PL="root:x:0:0:root:/root:/bin/bash"
IFS=':' //分隔符
j=0 //定义行数
for i in $PL
do
j=$((j+1))
echo 第$j个字段是$i
done
16.数组
B=(123 [8]=188 266)
echo ${B[@]} //取出数组元素
echo ${#B[@]} //数据个数
unset B //取消数组
unset B[0] //取消数组某个元素
17.利用here document,打包C的原始码
#!/bin/bash
echo "正在产生hello.c...."
echo
cat < hello.c
#include
int main(){
printf("Hello world!\n");
return 0;
}
EOF
echo "编译hello.c...."
echo
#编译Hello.c,产生执行文件
gcc -o hello hello.c
#若编译成功,就执行。
if [ $? -eq 0];then
echo "执行hello...."
echo
./hello
else
echo 'Complile ERROR:hello.c'
fi
18.高级变量主题
变量扩展
命令替换
算术扩展
在Bash Shell中,$算符会触发上述3种扩展,形式如下:
${变量名称}---变量扩展---${filename}
$(命令)---命令替换---$(ls /)
$((算术表达式))---算术扩展---$((9+9))
19.测试变量 存在与否用法
${待测变量-默认值}
待测变量,若不存在,返回 默认值;存在,返回 待测变量
unset myname
r=${$myname - 'fuck'}
echo $r
20.${待测变量:-默认值} 与上面相比 多了:测试变量 不存在 或 其值为空,返回 默认值
IamHappy='Feel so good'
r=${IamHappy:+'true'}
echo $r
21. 多文件搜寻方式:
fgrep.sh
#!/bin/bash
exec grep -F ${1+"$@"}
fgrep.sh Mem /proc/meminfo /root/test.txt
$1=Mem 非空,则,${1+"$@"}传回$@,此变量值等于所有位置参数组合起来的:
Mem /proce/meminfo /root/test.txt
grep -F Mem /proce/meminfo /root/test.txt
整理:
${待测变量:-默认值}---回传结果-定是非空值---测不存在或空值
${待测变量:=默认值}---给空值变量设一个默认值---测不存在或空值
${待测变量:?默认值}---检查条件是否完备---测不存在或空值
${待测变量:+默认值}---判断某事是否为真---测试存在且非空
移除:,只测存在性,不测空值
记忆法:
:)---空---测试空
-)---负向---测不存在
=)---设值---给空值变量设一个默认值
?)---有问题---检查条件是否完备后再来执行吧
+)---正向---测试存在
22.字符串截取
语法一:${变量:位置起点}
myname="sheller man"
substr=${myname:4}
echo $substr
语法二:${变量:位置起点:长度}
filename="/etc/apache2"
dir1=${filename:1:3}
echo $dir1
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26855487/viewspace-763735/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26855487/viewspace-763735/