1. 程式人生 > >Shell程式設計—根據使用者輸入來輸出符號正方形

Shell程式設計—根據使用者輸入來輸出符號正方形

這是我在學習Linux Shell程式設計的時候偶然遇到的一個小題目,想就其中的問題和大家分享討論一下,題目是這樣的:

指令碼執行時接受2-10範圍內的一個整數作為輸入引數,在螢幕上用+號,@號和&號畫出以給定引數為邊長的正方形。例如:指令碼執行時輸入4並回車,則在螢幕上會繪製如下的正方形:


其中2、3行的&之間有兩個空格

弄明白這個邏輯之後,我用幾分鐘寫出了它的C語言版本,程式碼如下

#include<stdio.h>
int main()
{
	int n,i,j;
	printf("input a number between 2 and 10\n");
	scanf("%d",&n);
	if(n==2)
		printf("@@\
[email protected]
@"); else { printf("@"); for(i=0;i<n-2;i++) { printf("+"); } printf("@\n"); for(j=0;j<n-2;j++) { printf("&"); for(i=0;i<n-2;i++) { printf(" "); } printf("&\n"); } printf("@"); for(i=0;i<n-2;i++) { printf("+"); } printf("@\n"); } return 0; }
然而在寫它的Shell版本時,我遇到了不少的麻煩,總結如下:

1.變數型別的麻煩

Shell是弱變數型別語言,這裡我想要輸入一個數字並將它作為數字來帶入計算和比較等都涉及到型別的問題,想要系統能夠幫你解釋執行就必須按照它規定的寫法來寫,比如我要將讀入的數減2之後與0相比較,就要用到Shell中算術運算的寫法,如下:
read n
num=$((n-2)

2.字串比較的麻煩

在這裡我要進行的是將運算得到結果num與0進行比較,若等於0,則輸出預設圖案,若不等於0,再進行下一步的操作,比較的命令如下:
if test $num = 0
與其它程式語言不同的是,這個需要加test命令,而且判等符號不是雙等於符號,當然這裡你寫雙等於符號也不會出錯


3.迴圈變數的麻煩

這是花了我最多時間解決的一個麻煩,一開始我是這樣寫的:
for((i=0;i<$num;i=i+1))
執行的時候系統就提示: Syntax error : Bad for loop variable——從字面意思來看就是指迴圈變數錯誤,因為這個for語句同樣也涉及到了我上面所說的變數算術運算的問題,所以我就想是不是要將運算放在$(())這個符號中進行的問題,於是我就按這個想法改了一下指令碼,執行的時候同樣報的也是這個錯誤,然後我就有點懵,不對啊,我明明按照格式在寫了,為什麼系統還是不認呢,沒辦法,百度,在我查看了網友的相同提示的各種錯誤解決方案之後,我確定了答案,原來是因為從ubuntu 6.10開始,ubuntu就將預設的bash shell改成了bash shell;其表現為預設連結到的/bin/bash/變成了/bin/dash/。如何解決這個問題呢,就要在終端執行一個命令:sudo dpkg-reconfigure dash 然後在彈出的選擇框中選擇no.這樣操作之後,再按照我第一種寫法執行,果然就沒有報錯了,那就證明這樣寫這個迴圈是正確的

4.輸出換行和不換行的麻煩

在Shell中輸出一般都是用的echo 語句,有的可以在echo中直接加\n表示換行,後來我發現在ubuntu中它是直接將\n這個字元輸出了,然後同樣網上一搜,方法就出來了,再經過了自己的數次實踐,原來echo是預設換行的,要想它輸出不換行,就必須使用-e引數以及\c相結合,也就是要在你不想換行的字元後面加一個\c告訴echo這個字元後面不用輸出換行 以上就是我在編寫這個指令碼中的收穫和體驗,希望能讓看到這邊文章的人也有所收穫,附上Shell完整程式碼如下:
#!/bin/bash
read n
num=$((n-2))

if test $num = 0
then
	echo -e "@@\[email protected]@"
else 
	echo -e  "@\c"
	for((i=0;i<$num;i=i+1))
	do
		echo -e "+\c"
	done
	echo  "@"

	for((j=0;j<$num;j=j+1))
	do
		echo -e "&\c"
		for((i=0;i<$num;i=i+1))
		do
			echo -e " \c"
		done
		echo "&"
	done
	echo -e "@\c"
	for((i=0;i<$num;i=i+1))
	do
		echo -e "+\c"
	done
	echo -e "@\n"
fi


相關推薦

Shell程式設計根據使用者輸入輸出符號正方形

這是我在學習Linux Shell程式設計的時候偶然遇到的一個小題目,想就其中的問題和大家分享討論一下,題目是這樣的: 指令碼執行時接受2-10範圍內的一個整數作為輸入引數,在螢幕上用+號,@號和&a

Linux Shell程式設計中的幾個特殊符號命令 & 、&& 、 ||

& 放在啟動引數後面表示設定此程序為後臺程序        預設情況下,程序是前臺程序,這時就把Shell給佔據了,我們無法進行其他操作,對於那些沒有互動的程序,很多時候,我們希望將其在後臺啟動,可以在啟動引數的時候加一個’&’實現這個目的。    2

Linux程式設計 22 shell程式設計(輸出輸入重定向,管道,數學運算命令,退出指令碼狀態碼)

1. 輸出重定向 最基本的重定向是將命令的輸出傳送到一個檔案中。在bash shell中用大於號(>) ,格式如下:command > inputfile。例如:將date命令的輸出內容,儲存到指定的輸出檔案中。      如果檔案已存在,重定向操作符會用新的檔案資料覆蓋已有檔案。這種情況下可以用

Shell程式設計輸入輸出功能

1. 接受從鍵盤上輸入的字元 echo -n "please input your name:" read name echo "your name is $name" echo -p "please input your name:" name echo $name 2

shell程式設計學習4改變語句執行的邏輯輸入輸出

例項 使用分號; 依次執行,沒有邏輯關係 mkdir /newdir ; cd /newdir //新建並進入newdir 使用&& 與邏輯,一旦出現失敗後面命令不執行 make && make install //保證編譯完成後安裝

shell程式設計學習3免互動輸入輸出方法

例項基於上一篇部落格 例項1 //使用stdin(可以用鍵盤,也可以用其他命令提供輸入) echo 666666 | passed --stdin hello //由echo給出 例項2 //使用黑洞裝置/dev/null //本來會輸出的success資訊會丟入黑洞/d

6、【Shell 程式設計輸入/輸出重定向

大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出傳送回到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。 重定向命令列表如下: 命令

Linux Shell 指令碼程式設計(3)—Shell輸入輸出

shell 輸入與輸出 提綱: echo read cat 管道 tee 檔案重定向

shell中的輸入輸出重定向——shell程式設計學習_四

shell中的輸入輸出輸入輸出重定向一般情況,我們的標準輸入是鍵盤,標準輸出是終端顯示器;但是在很多情況,我們需要從檔案中讀取資料作為輸入,然後將輸出資料儲存在檔案中。這是我們就需要將標準輸入從鍵盤重定向到檔案,將標準輸出重定向到檔案,這個過程就是輸入輸出重定向。輸出重定向輸

26期20180628 shell 命令操作 通配符 輸出輸入重定向

重新 a-z 安裝 AC ott fff 當前 sof itl 6月28日任務8.1 shell介紹8.2 命令歷史8.3 命令補全和別名8.4 通配符8.5 輸入輸出重定向shell介紹Shell腳本只是一個表現,所謂的shell是一個命令解釋器,用戶和機器的一個交互Sh

迅雷真題 輸入一個有符號的整數,逆序輸出

import java.util.Scanner; /** * */ /** * @author jueying: * @version 建立時間:2018-10-24 下午08:52:14 * 類說明 */ /** * @author jueying

2、shell輸入輸出

shell指令碼: 1、用途:完成特定的、較複雜的系統管理任務 2、格式:集中儲存多條Linux命令,普通的可執行的文字檔案 3、執行方式:按照預設的順序依次解釋執行 執行shell指令碼的方式: 1、bash test.sh 2、./test.sh     #需要

C程式設計——從鍵盤輸入多個數據,並輸出其中第二大的資料

1、注:第二大數小於最大數 2、程式 #include <stdio.h> int getmax2(int *,int); int main() { int a[99] = {0}; int count = 0; printf ("Please input

Problem C: 輸入10個數,根據提示進行從小到大輸出或從大到小輸出

#include<stdio.h> int main() { char ch; int a[15]; while(scanf("%c",&ch)!=EOF) { int i,j,temp; for(i=0;i<10

輸入一個有符號整數,輸出該整數的反轉值

題目描述: 輸入123,輸出321 輸入-456,輸出-654 輸入200,輸出2 import java.util.Scanner; public class Reverse_print{     public static void main(String []

shell程式設計之處理使用者輸入

目錄 讀取引數 測試引數 抓取引數 ③移動變數 ④處理選項 基本的讀取 超時 前言 >>>目前為止,我們涉及到的知識包括如何編寫指令碼,處理資料、變數和檔案 >>>bash s

2018/9/27 離散大作業 根據輸入命題輸出真值表及主析取(合取)正規化

zl老師佈置的作業,網上程式碼都好長,自己寫一個才200行 自己寫就是很開心,抄程式碼有什麼意思呢 恕我直言,無腦copy程式碼就像偷人孩子的人販子 課內作業 /* 符號註記: + * - -> <->

C語言程式設計---淺析輸入輸出

一.輸入和輸出 單個字元的輸入和輸出—getchar()和putchar() 相關知識: 何為字元常量? 即用單引號(’ ‘)括起來的字元。例如:‘a’是字元常量,a是識別符號。例如’5’也是字元常量,5是常數。 何為單個字元的輸入輸出? 記住三條命令的

C++Primer Plus筆記——第十七章 輸入輸出和檔案課後程式設計練習答案

課後程式設計練習答案 習題1              習題2             習題3            習題4              習題5            習題6 習題1 #include<iostream> int main(

0082-【Linux-Shell】-標準輸入標準輸出

標準輸入 標準輸出 標準錯誤 command > filename 把把標準輸出重定向到一個新檔案中 command >> filename 把把標準輸出重定向到一個檔案中(追加)