linux shell编程

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 329 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 
16
root@kali:~/桌面# a=$(($(wc -l 
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 )里面的空格

你可能感兴趣的:(linux基础,shell编程)