linux shell编程
2018-03-31 11:22
357 查看
shift
命令行参数右移 sheft 1
$* 获取命令行输入的所有参数,$1到9获取命令行输入的第一到9个参数
这些参数成为位置参数
用set指令可以设置位置参数的内容
这段代码吧ls -il filename中显示的内容放到了位置参数对应位置处
代码执行结果
变量设置
declare -i age=20
declare 声明并初始化变量,设置他们的属性
declare -xr OS=Linux(-x表示能被任意子进程访问,也就是全局变量。 r参数表示只读变量)
-a 表示声明一个数组,-f声明一个函数
下面是一个例子设置了一个全局变量
命令的替换
之前说过参数的替换用$,命令怎么替换呢:
加小括号就行了
另一种方法是用&
控制语句if
这里$#是查看命令行参数的个数
循环
for循环
IFS是内置环境标量,里面存的是分割符默认是空格,制表以及换行,这里我们把它临时改成了逗号
while循环
用(())来表示运算
使用while :可以无限循环
case语句
常用语句
break continue
exit(0表示成功)
printf “string”
数值处理指令:
le指令
如果最后的表达式取值为0,let命令返回1 否则返回0 2**x表示2的x次方
$(( ))
wc输出文件的行数。加<不输出文件名
用(expr )表示表达式
这是一个累加的shell,注意空格,[ ]里面的空格和$(expr )里面的空格
命令行参数右移 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 )里面的空格