程序员必知必会----linux常用命令之七【shell编程】

#!/bin/sh:指定执行脚步的shell

#:注释行

 

1.设置变量:

s1="content"

s2=$s1

s3="${s1}_test"

s4=`date`

 

 

 

 

2.特殊变量

$0:这个程序的文件名

$n:第n个参数,n=1-9

$*:这个程序的所有参数

$#:这个程序的参数个数

$$:这个程序的PID

$?:执行上一个命令的返回值,0:success 非0:error

 

还有一个特殊用法,打印长度:

var=1234567890

echo ${#var}

10

 

3.从键盘读入数据

read 变量:此时会等待用户键入变量值

read 变量1 变量2 变量3:可以设置多个

 

4.算术运算

expr 3 + 5

expr $var - 5

expr 100 / 5

expr 2 \* 4 :*号要进行转意

 

expr `expr 5 + 7` / 3

var1 = `expr 3 + 5`

expr \( 3 + 5 \) / 2 :括号要转意

 

bash中,变量自增的五种方法:

i=0

1. i=`expr $i + 1`

2. let i+=1

3. ((i++))

4. i=$[$i+1]

5. i=$(( $i + 1 ))

 

 

5.测试语句test == [ ]

1)字符串

str1 = str2 :测试字符串是否相等

str1 != str2 :测试字符串是否不等

-z str :测试字符串是否为空

-n str :测试字符串是否不为空

 

2)整数

int1 -eq int2 :测试整数是否相等

int1 -ge int2 :测试是否大于等于

int1 -gt int2 :测试是否大于

int1 -le int2 :测试是否小于等于

int1 -lt int2 :测试是否小于

int1 -ne int2 :测试是否不相等

 

3)文件

-d file :是否为目录

-f file :是否为常规文件

-x file :是否可执行

-r file :是否可读

-w file :是否可写

-a file :是否存在

-s file :文件大小是否非0

 

6.流程控制

exit 0 :正常退出

exit 1 :非0,非正常退出

 

-a :逻辑与,两个条件同时成立,结果为真

-o :逻辑或,两个条件只要有一个成立,结果为真

 

7.if条件判断

if [ -d $file ];then

…………

fi

 

if [ -d $file ];then

…………

else

…………

fi

 

 

if [ -d $file ];then

…………

elif [ -f $file ];then

…………

else

…………

fi

 

if [ -d $file -o -f $file ];then

…………

fi

 

8.for循环

for 变量 in 列表

do

……

done

 

例子:

for day in Sun Mon Tue Wed Thu Fri Sat

do 

echo "The day is : $day"

done

 

for line in `cat file`

do 

echo $line

done

 

9.select选项列表

select把关键字中的每一项做成类似表单,以交互执行do和done之间的命令

 

select 变量 in 关键字

do 

command1

command2

……

done

 

例子:select.sh

select var in "Linux" "UNIX" "Windows" "Other"

do

echo "You have selected $var"

break

done

显示结果:

# sh select.sh 

1) Linux

2) UNIX

3) Windows

4) Other

#? 1

You have selected Linux

 

10.case条件匹配

case 变量 in

字符串1)命令列表

;;

字符串2)命令列表

;;

*) 命令列表 :其它情况

;;

esac

 

例子:

var="start"

case "$var" in  

start)  

echo "start"

;;  

reload)  

echo "reload"

;;  

stop)  

echo "stop"  

;;  

status)  

echo "status"

;;  

*)  

echo "$0: Usage: $0 {start|status|stop|reload}"  

exit 1  

;;  

esac  

 

 

 

11.while循环

int1=0

while [ $int1 -le 100 ]

do

echo $int1

int1=`expr $int1 + 1`

done

 

12.until循环:类似while,不同点时条件判断为假时才执行

int1=100

until [ $int1 -eq 0 ]

do

echo $int1

int1=`expr $int1 - 1`

done

 

 

13.跳出循环

break:跳出整个循环

continue:跳过本次循环,进行下次循环

 

14.shift指令

每执行一次,参数序列顺序左移一个位置,$#的值减1,移出去的参数不在可用

例子:参数为 1 2 3 4 5

#!/bin/sh

if [ $# -le 0 ]

then

echo "Not enough parameters"

exit 0

fi

sum=0

while [ $# -gt 0 ]

do

sum=`expr $sum + $1`

shift #因为每次执行shift,所以上面的$1永远都是下一个参数

done

echo $sum

 

15.函数

函数定义:

函数名 (变量1,变量2,……)

{

命令序列

}

变量均为全局变量,shell没有局部变量,函数的变量参数在方法体内引用时$1,$2,……

例子:

stop() {

        echo -n $"Stopping $prog: "

        killall nginx

RETVAL=$?

        echo

        [ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog

}

 

 

函数调用:

函数名

 

case "$1" in

stop)

        stop

        ;;

 

*)

        echo $"Usage: $0 {start|stop|reconfigure|status}"

        exit 1

esac

 

 

16.脚步调试

sh -x 脚步:执行脚步,并显示全部过程

 

sh -n 脚步:不执行脚步,只检查语法错误

 

17.dos2unix

如果在windows环境下编写的脚步,上传到linux后需要先执行dos2unix进行编码转换,否则不能正确执行

 

dos2unix *.sh

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,但是我没有找到关于程序员编程艺术1-38的PDF。根据引用\[1\]中的信息,程序员编程艺术的总结只包括前二十二章。引用\[3\]提供了一个下载地址,但是只包含了前37章的PDF。所以,目前我无法提供程序员编程艺术1-38的PDF下载地址。 #### 引用[.reference_title] - *1* [程序员编程艺术第一~二十七章集锦与总结(教你如何编程),及PDF免分下载](https://blog.csdn.net/v_JULY_v/article/details/7506231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [程序员编程艺术第二十五章:Jon Bentley:90%无法正确实现二分查找](https://blog.csdn.net/iteye_20954/article/details/82237124)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [程序员编程艺术第一~三十八章集锦与总结,及Github地址、PDF下载](https://blog.csdn.net/v_JULY_v/article/details/17303459)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值