标签:val pad sed roo and cin put 启动 body
$# 表示参数的个数
[root@znix ~]# cat /server/scripts/show2.sh
#!/bin/bash
echo $1 $2 $#
if [ $? == 0 ];then
echo "OK"
fi
实例1-1 执行的不同结果
[root@znix ~]# sh /server/scripts/show2.sh 1 2 3 4 6
1 2 5
[root@znix ~]# sh /server/scripts/show2.sh aa bb
aa bb 2
[root@znix ~]# sh /server/scripts/show2.sh aa bb cc
aa bb 3
$?表示:上一个命令执行后的状态
状态为0 表示执行正确
状态非0 表示执行错误
[root@znix ~]# aaa
-bash: aaa: command not found
[root@znix ~]# echo $?
127
[root@znix ~]# sed
Usage: sed [OPTION]...
[root@znix ~]# echo $?
4
[root@znix ~]# sh /server/scripts/show2.sh aa bb
aa bb 2
[root@znix ~]# echo $?
0
切菜备菜 ./configure
炒菜 make
上菜 make install
[root@znix ~]# read a
惨绿少年
[root@znix ~]# echo $a
惨绿少年
-p 为显示提示信息。p作为输出,一定要写在其他参数的最后面。
[root@znix ~]# read -p "请输入:" a
请输入:呵呵
[root@znix ~]# echo $a
呵呵
-t5 等待5秒
[root@znix ~]# read -t5 -p "请输入密码:" a
请输入密码:
[root@znix ~]#
[root@znix ~]# read -t5 -p "请输入密码:" a
请输入密码:123
-s 输入的时候不显示输入内容。
[root@znix ~]# read -s -t50 -p "请输入密码:" a
请输入密码:
[root@znix ~]# echo $a
admin
[root@znix ~]# vim /server/scripts/cal.sh
#!/bin/bash
read -p "input 1st num:" a
read -p "input 2st num:" b
[root@znix ~]# sh /server/scripts/cal.sh
input 1st num:1
input 2st num:2
0.5
3
-1
2
[root@znix ~]# read -p "输入第一个 第二关数字:" a b
输入第一个 第二关数字:123 456
[root@znix ~]# echo $a $b
123 456
使用一条read命令,读取两个参数。
[root@znix ~]# vim /server/scripts/cal.sh
#!/bin/bash
read -p "input 1st&2st num:" a b
awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1/num2}‘
awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1+num2}‘
awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1-num2}‘
awk -vnum1=$a -vnum2=$b ‘BEGIN{print num1*num2}‘
"/server/scripts/cal.sh" 15L, 355C written
?注意 : 同时传入两个参数的时候,参数之间要使用空格分割.
[root@znix ~]# sh /server/scripts/cal.sh
input 1st&2st num:1 2
0.5
3
-1
2
cat + $?‘
ls + $?
test命令
test命令不会自己输出执行的结果,配合$?查询上一条命令是否执行成功,就能够判断是否存在这个文件或目录.
-f 为判断的对象是文件,0为存在,1为不存在
[root@znix ~]# test -f /oldboy/oldboy.txt
[root@znix ~]# echo $?
0
[root@znix ~]# test -f /oldboy/oldboy
[root@znix ~]# echo $?
1
-d 为对目录进行判断,0为存在,1为不存在.
[root@znix ~]# test -d /znix
[root@znix ~]# echo $?
1
[root@znix ~]# test `-d /oldboy/
[root@znix ~]# echo $?
0
?使用[ ]的时候注意中间的空格,两边都要有两个空格
[ ]与test命令的功能相似,可以进行判断,相比test命令更为便捷
与test命令一样 [ ] 判断的结果也0为存在,1为不存在
[root@znix ~]# [ -f /zinx.txt ]
[root@znix ~]# echo $?
1
[root@znix ~]# [ -f /root/oldboy.txt ]
[root@znix ~]# echo $?
0
判断文件/目录是否存在,判断成功执行后面的内容,输出ok ;判断失败,不执行后面的命令.
[root@znix ~]# [ -f /oldboy/znix.txt ] && echo "ok"
[root@znix ~]# [ -d /oldboy ] && echo "ok"
ok
如果这个文件不存在,就创建 (使用 || ), || 表示前面的执行错误了,执行后面的命令.
[root@znix ~]# [ -f /oldboy/znix.txt ] || touch /oldboy/znix.txt
[root@znix ~]# ls -l /oldboy/znix.txt
-rw-r--r-- 1 root root 0 Sep 20 10:31 /oldboy/znix.txt
[root@znix ~]# [ -d /root/oldboydir ] || mkdir -p /root/oldboydir
[root@znix ~]# ls -ld /root/oldboydir
drwxr-xr-x 2 root root 4096 Sep 20 10:36 /root/oldboydir
使用 && ,前面的执行成功,执行后面的; ! 表示非,不存在.
[root@znix ~]# [ ! -d /root/oldboydir/1 ] && mkdir -p /root/oldboydir/1
[root@znix ~]# ll -d /root/oldboydir/1
drwxr-xr-x 2 root root 4096 Sep 20 10:41 /root/oldboydir/1
如果 [ 这个文件存在 ];然后
提示文件存在
否则
创建这个文件
果如
if [ -f /root/oldboy.txt ];then
echo "文件存在"
else
touch /root/oldboy.txt
fi
写入脚本的时候,注意脚本的基本格式.
[root@znix ~]# vim /server/scripts/if.sh
#!/bin/bash
if [ -f /root/oldboy.txt ];then
echo "文件存在"
else
touch /root/oldboy.txt
fi
[root@znix ~]# sh /server/scripts/if.sh
文件存在
符号 | 参数 | 含义 | 英文 |
> | -gt | 大于 | great than |
>= | -ge | 大于等于 | great equal |
< | -lt | 小于 | less than |
<= | -le | 小于等于 | less than or equal |
== | -eq | 等于 | equal |
!= | -ne / ! -eq | 不等于 | not equal |
!= 表示判断两个是否不相等,如果不想等就显示命令错误
#/bin/bash
if [ $# != 2 ];then
echo "命令错误"
fi
当参数的个数为2的时候,不会输出,个数不为二的时候输出 命令错误
[root@znix ~]# sh /server/scripts/cal2.sh
命令错误
[root@znix ~]# sh /server/scripts/cal2.sh 1 2
[root@znix ~]# sh /server/scripts/cal2.sh 1 2 3
命令错误
当输入的参数不为2的时候 执行 echo "Usage: NUM1 NUM2", 然后执行 exit..
exit 表示前面的执行完成后就结束(跳出),不会再执行脚本后面的内容.
[root@znix ~]# vim /server/scripts/cal2.sh
#!/bin/bash
if [ $# -ne 2 ];then
echo "Usage: NUM1 NUM2"
exit
fi
a=$1
b=$2
awk -vh=$a -vz=$b ‘BEGIN{print h/z}‘
awk -vh=$a -vz=$b ‘BEGIN{print h+z}‘
awk -vh=$a -vz=$b ‘BEGIN{print h-z}‘
awk -vh=$a -vz=$b ‘BEGIN{print h*z}‘
当输入的参数个数不为2的时候执行echo 命令
当输入的参数个数为2的时候进行计算
[root@znix ~]# sh /server/scripts/cal2.sh
Usage: NUM1 NUM2 ##提示信息
[root@znix ~]# sh /server/scripts/cal2.sh 22 22
1
44
0
484
循环的格式 :
for hd in znix_{a..z}
do
echo $hd
done
[root@znix ~]# for hd in znix_{a..z}
> do
> echo $hd
> done
znix_a
znix_b
znix_c
znix_d
……
znix_z
do里面可以两条命令同时执行.
for hd in {01..20}
do
date -s "201705$hd"
touch /tmp/date/$(date +%F).txt
done
[root@znix ~]# for hd in {01..20}
> do
> date -s "201705$hd"
> touch /tmp/date/$(date +%F).txt
> done
Mon May 1 00:00:00 CST 2017
Tue May 2 00:00:00 CST 2017
Wed May 3 00:00:00 CST 2017
……
Sat May 20 00:00:00 CST 2017
[root@znix ~]# ls /tmp/date/
2017-05-01.txt 2017-05-05.txt 2017-05-09.txt 2017-05-13.txt 2017-05-17.txt
2017-05-02.txt 2017-05-06.txt 2017-05-10.txt 2017-05-14.txt 2017-05-18.txt
2017-05-03.txt 2017-05-07.txt 2017-05-11.txt 2017-05-15.txt 2017-05-19.txt
2017-05-04.txt 2017-05-08.txt 2017-05-12.txt 2017-05-16.txt 2017-05-20.txt
for name in 要关闭的服务的名字
do
chkconfig $name off
done
[root@znix ~]# chkconfig |egrep -v "sshd|network|crond|rsyslog|sysstat"|awk ‘{print $1}‘
abrt-ccpp
abrtd
acpid
……
for name in `chkconfig |egrep -v "sshd|network|crond|rsyslog|sysstat"|awk ‘{print $1}‘`
do
chkconfig $name off
done
前面有 + 表示执行过的命令的
前面没有东西,表示输出到屏幕上的内容。
[root@znix ~]# sh -x /server/scripts/cal2.sh
+ ‘[‘ 0 -ne 2 ‘]‘
+ echo ‘Usage: NUM1 NUM2‘
Usage: NUM1 NUM2
+ exit
[root@znix ~]# sh -x /server/scripts/cal2.sh 10 20
+ ‘[‘ 2 -ne 2 ‘]‘
+ a=10
+ b=20
+ awk -vh=10 -vz=20 ‘BEGIN{print h/z}‘
0.5
+ awk -vh=10 -vz=20 ‘BEGIN{print h+z}‘
30
+ awk -vh=10 -vz=20 ‘BEGIN{print h-z}‘
-10
+ awk -vh=10 -vz=20 ‘BEGIN{print h*z}‘
200
ctrl + v 按d批量删除
ctrl + v 按x批量删除
dd 删除光标所在行
dG 删除光标所在行到最后一行
D 光标所在位置到行尾的内容
x 删除光标所在位置的一个字符
[root@znix ~]# cat -A test.txt
znix$
$
linux$
$
good$
$
n$
0次的时候即为^$ 表示空行,以上表示空格的行
[root@znix ~]# sed ‘/^ *$/d‘ test.txt
znix
linux
good
n
[root@znix ~]# sed -r ‘/^ +$|^$/d‘ test.txt
znix
linux
good
n
[root@znix ~]# sed -n ‘/^ *$/!p‘ test.txt
znix
linux
good
n
[root@znix ~]# sed -nr ‘/^$|^ +$/!p‘ test.txt
znix
linux
good
n
$1,$2... 用来传递参数
$0 脚本文件的文件名
$# 脚本中参数的个数
$? 前一条命令是否执行成功
常用的 LANG PATH PS1 ……
自己定义的变量
/etc/profile
/etc/profile.d (目录)
/etc/bashrc
~/.bashrc
~/.bash_profile
shell编程下 特殊变量、test / [ ]判断、循环、脚本排错
标签:val pad sed roo and cin put 启动 body
原文地址:http://www.cnblogs.com/znix/p/7639856.html