您的位置:首页 > 运维架构 > Shell

linux shell编程

2018-03-31 11:22 357 查看
shift

命令行参数右移 sheft 1

root@kali:~/桌面# sh test1 dadsada 12
dadsada 12
12


#!/bin/bash
echo "$*"
shift 1
echo "$1"


$* 获取命令行输入的所有参数,$1到9获取命令行输入的第一到9个参数

这些参数成为位置参数

用set指令可以设置位置参数的内容

#!/bin/bash
filename="$1"
set $(ls -il $filename)
inode="$1"
size="$6"
echo "$1 $2 $3 $4 $5 $6 $7 $8 $9"


这段代码吧ls -il filename中显示的内容放到了位置参数对应位置处

root@kali:~/桌面# ls -il shell
935896 -rw-r--r-- 1 root root 140 3月  29 18:27 shell


代码执行结果

root@kali:~/桌面# sh shell
总用量 4 936202 -rw-r--r-- 1 root root 105 3月


变量设置

declare -i age=20

declare 声明并初始化变量,设置他们的属性

declare -xr OS=Linux(-x表示能被任意子进程访问,也就是全局变量。 r参数表示只读变量)

-a 表示声明一个数组,-f声明一个函数

下面是一个例子设置了一个全局变量

root@kali:~/桌面# declare -x file="shell"
root@kali:~/桌面# echo $file
shell
root@kali:~/桌面# ls $file
shell
root@kali:~/桌面# cat $file
#!/bin/bash filename="$1" set $(ls -il $filename) inode="$1" size="$6" echo "$1 $2 $3 $4 $5 $6 $7 $8 $9"


命令的替换

之前说过参数的替换用$,命令怎么替换呢:

root@kali:~/桌面# echo "$(pwd)"


加小括号就行了

另一种方法是用&

oot@kali:~/桌面# echo &date "+%B%d%A"
[1] 2616

三月29星期四


控制语句if

#!/bin/bash
if test $# -eq 0
then
echo "error"
else
gzip $1
echo "OK"
fi


这里$#是查看命令行参数的个数

循环

for循环

#!/bin/bash
data="a,b,c,d"
IFSBAK=$IFS
IFS=,
for item in $data
do
echo item:$item
done
IFS=$IFSBAK


IFS是内置环境标量,里面存的是分割符默认是空格,制表以及换行,这里我们把它临时改成了逗号

while循环

#!/bin/bash
foo=1
while [ "$foo" -le 20 ]
do
echo "Here we go again"
foo=$(($foo+1))
done
exit 0


用(())来表示运算

使用while :可以无限循环

case语句

#!/bin/bash
echo -n "is it morning? please answer yes or no:"
read timeofday
case "$timeofday" in
yes ) echo "M";;
no ) echo "A";;
y ) echo "M";;
n ) echo "A";;
* ) echo "S";;
esac
exit 0


常用语句

break continue

exit(0表示成功)

printf “string”

数值处理指令:

le指令

root@kali:~/桌面# let x=6 y=3 z=4
root@kali:~/桌面# let t=x+y
root@kali:~/桌面# echo "t= $t"
t= 9


如果最后的表达式取值为0,let命令返回1 否则返回0 2**x表示2的x次方

$(( ))

root@kali:~/桌面# wc -l <shell
16
root@kali:~/桌面# a=$(($(wc -l <shell)/10+1))
root@kali:~/桌面# echo $a
2


wc输出文件的行数。加<不输出文件名

用(expr )表示表达式

#!/bin/bash
if [ $# = 0 ]
then
echo "usage: $0 number-list"
exit 1
fi
sum=0
count=0

while [ $# != 0 ]
do
sum=$(expr $sum + $1)
if [ $? != 0 ]
then
exit 1
fi
count=$((count+1))
shift
done
echo $sum


这是一个累加的shell,注意空格,[ ]里面的空格和$(expr )里面的空格
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: